2013-02-20 187 views
0

onload僅帶來實體的id,其他屬性爲null。Hibernate攔截器

我需要驗證實體採樣是否取決於IAccount的某些屬性的值。這裏是我的代碼到目前爲止:

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

我該怎麼做?

回答

1

OnLoad發生在實體對象實際初始化之前,所以「實體」將具有默認的屬性值,如您已經看到的。您評估或更改實體狀態的方式是通過「狀態」通過。

您的示例並非針對您要評估的內容,但讓我們假裝您希望執行一些日誌記錄如果您IAccount的IsSampling屬性爲false:

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; 
} 

還請注意,我在返回false,以表明實體的狀態沒有改變。如果要更改實體的狀態,則必須通過傳入的狀態集合(而不是通過傳入的實體對象)來完成此操作,並且必須返回true。

它可以是很難發現的文件,涵蓋這一點,但這裏是一個源(雖然它是有點過時):NHibernate.IInterceptor