开发者

How to get list of changed (dirty) entities from Nhibernate session?

I need to write some business logic rigt before flush against all changed entities. One of the solution I've tried is IPreUpdateEventListener. But this event listener already have obje开发者_JS百科ct denormalized to key-value. I need something before denormalization and even before flush.

So the questions is how to get list of changed (diry) entities.


My code to detect dirty entities

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


You might look at the Flush event. But what are you trying to accomplish, exactly?


Well, best solution I've found is using PersistenceContext.

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

Not sure if this is right solution, however.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜