В 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 (), является проблемой. Массив заполнен нулями, а не фактическими значениями из моей сущности.

Когда я вошел в код, я обнаружил, что отражение используется для получения значений из полей - но поля нулевые. Это похоже на результат прокси, но я не совсем уверен, куда идти дальше.

Ответы на вопрос(1)

Ваш ответ на вопрос