2010-05-17 38 views
0

我需要找出如何更新X類型的對象時執行某些操作(刷新緩存)。所以當我保存類型Y的對象時,什麼都不做,當我保存類型X的不變的對象時,什麼都不應該發生,但是當這個對象被改變並且UPDATE被創建時,我想知道它。如何使用Nhibernate檢測對象是否已更新?

我嘗試了各種NHibernate事件(IPostUpdateEventListenerIFlushEntityEventListener等)但沒有成功。

任何人都可以幫忙嗎?謝謝

回答

1

我在執行方法中遇到問題,因爲在某些情況下,我必須在默認實現上調用相同的方法,否則代碼路徑以我的方式結束碼。

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

你想要一個IPostUpdateEventListener。爲什麼不發佈你的代碼不起作用,然後我們可以幫忙;)

相關問題