我需要获取在nhibernate会话中使用的对象,这些对象在加载后被修改。
会话提供属性isDirty,指示天气对象是否在会话中被修改。
我需要一个方法来返回导致isDirty返回true的对象。
如果你能提供一些C代码来完成这项任务,我会非常高兴的。
最佳答案
基于jbl的注释我的代码来查找所有“脏”对象
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);
}
}