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