変更されたすべてのエンティティに対してフラッシュする前に、いくつかのビジネス ロジックを記述する必要があります。私が試した解決策の 1 つは、IPreUpdateEventListener です。ただし、このイベント リスナーには、キー値に非正規化されたオブジェクトが既に含まれています。非正規化の前、さらにはフラッシュの前に何かが必要です。
したがって、質問は、変更された (diry) エンティティのリストを取得する方法です。
変更されたすべてのエンティティに対してフラッシュする前に、いくつかのビジネス ロジックを記述する必要があります。私が試した解決策の 1 つは、IPreUpdateEventListener です。ただし、このイベント リスナーには、キー値に非正規化されたオブジェクトが既に含まれています。非正規化の前、さらにはフラッシュの前に何かが必要です。
したがって、質問は、変更された (diry) エンティティのリストを取得する方法です。
ダーティエンティティを検出するための私のコード
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);
}
}
Flush イベントを見ることができます。しかし、正確に何を達成しようとしていますか?
私が見つけた最善の解決策は、PersistenceContext を使用することです。
foreach (var entity in eventSource.PersistenceContext.EntityEntries.Keys)
{
// entity is entity to update...
}
ただし、これが正しい解決策かどうかはわかりません。