W NHibernate moje sprawdzanie, czy obiekt jest brudny, kończy się niepowodzeniem

tło

Podobny doto pytanie, Muszę określić, czy obiekt w mojej aplikacji NHibernate jest brudny, czy nie. Na ISession istnieje metoda „IsDirty”, ale chcę sprawdzić konkretną jednostkę, a nie całą sesję.

Ten post na nhibernate.info opisuje metodę sprawdzania jednostki, pobierając jej stan bazy danych i porównując ją z aktualnym stanem jednostki.

Problem

Skopiowałem tę metodę, ale to nie działa dla mnie. Zobacz kod:

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

Problem stanowi linia wypełniająca tablicę currentState przez wywołanie persister.GetPropertyValues ​​(). Tablica jest pełna wartości null, zamiast rzeczywistych wartości z mojego obiektu.

Kiedy wkroczyłem do kodu, odkryłem, że odbicie jest używane do uzyskania wartości z pól - ale pola są puste. Wydaje się, że jest to wynik działania proxy, ale nie jestem do końca pewien, dokąd się udać.

questionAnswers(1)

yourAnswerToTheQuestion