在刷新所有更改的实体之前,我需要编写一些业务逻辑绑定。我尝试过的解决方案之一是 IPreUpdateEventListener。但是这个事件监听器已经将对象非规范化为键值。在非规范化之前甚至在刷新之前我都需要一些东西。
所以问题是如何获取已更改(干)实体的列表。
在刷新所有更改的实体之前,我需要编写一些业务逻辑绑定。我尝试过的解决方案之一是 IPreUpdateEventListener。但是这个事件监听器已经将对象非规范化为键值。在非规范化之前甚至在刷新之前我都需要一些东西。
所以问题是如何获取已更改(干)实体的列表。
我检测脏实体的代码
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...
}
但是,不确定这是否是正确的解决方案。