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.
精彩评论