1

onloadはエンティティのIDのみをもたらし、他のプロパティはnullです。

IAccountの特定のプロパティの値に応じて、エンティティがサンプリングされているかどうかを検証する必要があります。これまでの私のコードは次のとおりです。

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

これどうやってするの?

4

1 に答える 1

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 を返す必要があります。

これをカバーするドキュメントを見つけるのは難しいかもしれませんが、ここに 1 つのソースがあります (少し古いですが): NHibernate.IInterceptor

于 2013-07-10T13:51:24.937 に答える