3

変更されたすべてのエンティティに対してフラッシュする前に、いくつかのビジネス ロジックを記述する必要があります。私が試した解決策の 1 つは、IPreUpdateEventListener です。ただし、このイベント リスナーには、キー値に非正規化されたオブジェクトが既に含まれています。非正規化の前、さらにはフラッシュの前に何かが必要です。

したがって、質問は、変更された (diry) エンティティのリストを取得する方法です。

4

3 に答える 3

5

ダーティエンティティを検出するための私のコード

        var dirtyObjects = new List<object>();
        var sessionImpl = hsession.GetSessionImplementation();
        foreach (NHibernate.Engine.EntityEntry entityEntry in sessionImpl.PersistenceContext.EntityEntries.Values)
        {
            var loadedState = entityEntry.LoadedState;
            var o = sessionImpl.PersistenceContext.GetEntity(entityEntry.EntityKey);
            var currentState = entityEntry.Persister.GetPropertyValues(o, sessionImpl.EntityMode);
            if (entityEntry.Persister.FindDirty(currentState, loadedState, o, sessionImpl) != null)
            {
                dirtyObjects.Add(entityEntry);
            }
        }
于 2014-09-25T11:15:05.707 に答える
1

Flush イベントを見ることができます。しかし、正確に何を達成しようとしていますか?

于 2010-06-28T15:39:25.183 に答える
1

私が見つけた最善の解決策は、PersistenceContext を使用することです。

foreach (var entity in eventSource.PersistenceContext.EntityEntries.Keys)
{
    // entity is entity to update...
}

ただし、これが正しい解決策かどうかはわかりません。

于 2010-06-28T15:52:39.273 に答える