我需要了解更新类型X的对象时如何执行某些操作(刷新缓存)。
所以当我保存类型为Y的对象时,什么都没做,当我保存类型为X的未更改对象时,什么都不应该发生,但是当这个对象被更改并且进行了更新时,我想知道它。
我尝试了各种NHibernate事件(IPostUpdateEventListener
,IFlushEntityEventListener
等),但没有成功。
有人可以帮忙吗?感谢
答案 0 :(得分:2)
你想要一个IPostUpdateEventListener
。为什么不发布不起作用的代码,然后我们可以提供帮助;)
答案 1 :(得分:1)
我在实现的方法中遇到问题,因为在某些情况下我必须在默认实现上调用相同的方法,否则代码路径在我的代码中结束。
private readonly DefaultFlushEntityEventListener _impl = new DefaultFlushEntityEventListener();
public void OnFlushEntity(FlushEntityEvent flushEntityEvent)
{
... my code goeas here ...
_impl.OnFlushEntity(flushEntityEvent);
}
在IFlushEntityEventListener
的OnFlush方法中,我无法检测到脏属性......等等。
但真正有效的是(感谢Andrew)就是这段代码
public void OnPostUpdate(PostUpdateEvent postUpdateEvent)
{
var dirtyProperties = postUpdateEvent.Persister.FindDirty(postUpdateEvent.State, postUpdateEvent.OldState, postUpdateEvent.Entity, postUpdateEvent.Session);
int dirty = dirtyProperties.Length;
if (dirty == 0) // I want detect only modififed entities
return;
Trace.WriteLine(string.Format("OnPostUpdate({0}, {3}) in session#{1} - dirty props. {2}", postUpdateEvent.Entity.GetType().Name, postUpdateEvent.Session.GetHashCode(), dirty, postUpdateEvent.Entity.GetHashCode()));
lock (_objects)
{
if (!_objects.Contains(postUpdateEvent.Entity)) // I will manipulate this list in `AbstractFlushingEventListener.PostFlush` method
_objects.Add(postUpdateEvent.Entity);
}
}