2013-02-20 2 views
0

Нагрузка содержит только идентификатор объекта, а остальные свойства - null.Перехватчик Hibernate

Мне нужно проверить, выполняется ли выборка сущности в зависимости от значений определенных свойств IAccount. Вот мой код:

public bool OnLoad(object entity, object id, System.Collections.IDictionary state) 
{ 
    IAccount account = (IAccount)entity; 
    account.xxxxxx   
    return true; 
} 

Как это сделать?

ответ

1

OnLoad происходит до того, как объект объекта фактически инициализирован, поэтому «объект» будет иметь значения свойств по умолчанию, как вы уже видели. То, как вы оцениваете или изменяете состояние объекта, находится через переданное «состояние».

Ваш пример не очень конкретен в отношении того, что вы пытаетесь оценить, но позвольте нам сделать вид, что вы хотите выполнить некоторые протоколирования если свойство IsSampling вашего IAccount ложна:

public bool OnLoad(object entity, object id, System.Collections.IDictionary state) 
{ 
    var isSampling = state["IsSampling"] as bool?; 

    if(entity is IAccount && isSampling.HasValue) 
    { 
     if(!isSampling) 
      Log.Write(string.Format("Sampling for Account with id {0} is not active", id)); 
    } 

    return false; 
} 

Заметим также, что я возвращал ложь, чтобы показать, что состояние объекта не было изменено. Если вы хотите изменить состояние объекта, вы должны сделать это через коллекцию состояний, переданную (не через передаваемый объект сущности), и вы должны вернуть true.

Это может быть трудно находкой документации, которая охватывает это, но вот один источник (хотя он немного устарел): NHibernate.IInterceptor

Смежные вопросы