No NHibernate, meu cheque se a entidade está suja falha

fundo

Igual aessa questãoPreciso determinar se uma entidade em meu aplicativo NHibernate está suja ou não. Existe um método "IsDirty" no ISession, mas quero verificar uma entidade específica, não toda a sessão.

Este post no nhibernate.info descreve um método de verificação de uma entidade buscando o estado do banco de dados e comparando-o com o estado atual da entidade.

Problema

Eu copiei esse método, mas não está funcionando para mim. Veja o código:

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 (dirtyProps != null);
}

A linha que preenche a matriz currentState chamando persister.GetPropertyValues ​​() é o problema. A matriz está cheia de nulos, em vez dos valores reais da minha entidade.

Quando eu entrei no código, descobri que a reflexão está sendo usada para obter os valores dos campos - mas os campos são nulos. Isso parece ser um resultado do proxy, mas não sei bem para onde ir a partir daqui.

questionAnswers(1)

yourAnswerToTheQuestion