Как получить список измененных (грязных) сущностей из сеанса Nhibernate? - PullRequest
2 голосов
/ 28 июня 2010

Мне нужно написать какую-то бизнес-логику, прежде чем очищать все измененные сущности.Одним из решений, которое я попробовал, является IPreUpdateEventListener.Но у этого слушателя событий уже есть объект, денормализованный до значения ключа.Мне нужно что-то до денормализации и даже до сброса.

Так что вопрос в том, как получить список измененных (грязных) сущностей.

Ответы [ 3 ]

3 голосов
/ 25 сентября 2014

Мой код для обнаружения грязных объектов

        var dirtyObjects = new List<object>();
        var sessionImpl = hsession.GetSessionImplementation();
        foreach (NHibernate.Engine.EntityEntry entityEntry in sessionImpl.PersistenceContext.EntityEntries.Values)
        {
            var loadedState = entityEntry.LoadedState;
            var o = sessionImpl.PersistenceContext.GetEntity(entityEntry.EntityKey);
            var currentState = entityEntry.Persister.GetPropertyValues(o, sessionImpl.EntityMode);
            if (entityEntry.Persister.FindDirty(currentState, loadedState, o, sessionImpl) != null)
            {
                dirtyObjects.Add(entityEntry);
            }
        }
1 голос
/ 28 июня 2010

Что ж, лучшее решение, которое я нашел, это использовать PersistenceContext.

foreach (var entity in eventSource.PersistenceContext.EntityEntries.Keys)
{
    // entity is entity to update...
}

Однако не уверен, что это правильное решение.

1 голос
/ 28 июня 2010

Вы можете посмотреть на событие Flush.Но чего именно вы пытаетесь достичь?

...