En NHibernate, mi cheque si la entidad está sucia falla

Fondo

Similar aesta pregunta, Necesito determinar si una entidad en mi aplicación NHibernate está sucia o no. Hay un método "IsDirty" en ISession, pero quiero verificar una entidad específica, no toda la sesión.

Este post en nhibernate.info describe un método para verificar una entidad obteniendo el estado de su base de datos y comparándolo con el estado actual de la entidad.

Problema

He copiado ese método, pero no me funciona. Ver el codigo

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);
}

El problema es la línea que llena la matriz currentState llamando a persister.GetPropertyValues ​​(). La matriz está llena de valores nulos, en lugar de los valores reales de mi entidad.

Cuando ingresé al código, descubrí que se está utilizando la reflexión para obtener los valores de los campos, pero los campos son nulos. Esto parece ser un resultado del proxy, pero no estoy muy seguro de a dónde ir desde aquí.

Respuestas a la pregunta(1)

Su respuesta a la pregunta