我需要获取在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);
    }
}

08-25 14:53