我需要找出如何更新X類型的對象時執行某些操作(刷新緩存)。所以當我保存類型Y的對象時,什麼都不做,當我保存類型X的不變的對象時,什麼都不應該發生,但是當這個對象被改變並且UPDATE被創建時,我想知道它。如何使用Nhibernate檢測對象是否已更新?
我嘗試了各種NHibernate事件(IPostUpdateEventListener
,IFlushEntityEventListener
等)但沒有成功。
任何人都可以幫忙嗎?謝謝
我需要找出如何更新X類型的對象時執行某些操作(刷新緩存)。所以當我保存類型Y的對象時,什麼都不做,當我保存類型X的不變的對象時,什麼都不應該發生,但是當這個對象被改變並且UPDATE被創建時,我想知道它。如何使用Nhibernate檢測對象是否已更新?
我嘗試了各種NHibernate事件(IPostUpdateEventListener
,IFlushEntityEventListener
等)但沒有成功。
任何人都可以幫忙嗎?謝謝
我在執行方法中遇到問題,因爲在某些情況下,我必須在默認實現上調用相同的方法,否則代碼路徑以我的方式結束碼。
private readonly DefaultFlushEntityEventListener _impl = new DefaultFlushEntityEventListener();
public void OnFlushEntity(FlushEntityEvent flushEntityEvent)
{
... my code goeas here ...
_impl.OnFlushEntity(flushEntityEvent);
}
在IFlushEntityEventListener
OnFlush方法我無法檢測髒性能等...
但是真正的工作是(感謝安德魯)是這個代碼
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);
}
}
你想要一個IPostUpdateEventListener
。爲什麼不發佈你的代碼不起作用,然後我們可以幫忙;)