В NHibernate моя проверка, грязная ли сущность, терпит неудачу
Похожий наэтот вопросМне нужно определить, является ли объект в моем приложении 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 ob,j = 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 (dirtyProps != null);
}
Строка, которая заполняет массив currentState путем вызова persister.GetPropertyValues (), является проблемой. Массив заполнен нулями, а не фактическими значениями из моей сущности.
Когда я вошел в код, я обнаружил, что отражение используется для получения значений из полей - но поля нулевые. Это похоже на результат прокси, но я не совсем уверен, куда идти дальше.