与此问题类似,我需要确定我的NHibernate应用程序中的实体是否脏.在ISession上有一个"IsDirty"方法,但我想检查一个特定的实体,而不是整个会话.
nhibernate.info上的这篇文章描述了一种通过获取数据库状态并将其与实体的当前状态进行比较来检查实体的方法.
我复制了那种方法,但它对我不起作用.看代码:
public static Boolean IsDirtyEntity(this ISession session, Object entity)
{
String className = NHibernateProxyHelper.GuessClass(entity).FullName;
ISessionImplementor sessionImpl = session.GetSessionImplementation();
IPersistenceContext persistenceContext = sessionImpl.PersistenceContext;
IEntityPersister persister = sessionImpl.Factory.GetEntityPersister(className);
EntityEntry oldEntry = sessionImpl.PersistenceContext.GetEntry(entity);
if ((oldEntry == null) && (entity is INHibernateProxy))
{
INHibernateProxy proxy = entity as INHibernateProxy;
Object obj = sessionImpl.PersistenceContext.Unproxy(proxy);
oldEntry = sessionImpl.PersistenceContext.GetEntry(obj);
}
Object [] oldState = oldEntry.LoadedState;
Object [] currentState = persister.GetPropertyValues(entity, sessionImpl.EntityMode);
Int32 [] dirtyProps = persister.FindDirty(currentState, oldState, entity, sessionImpl);
return …Run Code Online (Sandbox Code Playgroud) nhibernate ×1