2012-03-29 16 views
1

加載老態對象我有一個叫如何NHibernate的事件OnFlushEntity

public class AuditFlushEntityEventListener : DefaultFlushEntityEventListener 

該類覆蓋OnFlushEntity類。所以我有一個FlushEntityEvent。 我想知道如何在更新期間恢復舊的狀態對象。

直到現在我只是有我的@event.Entity(我的域對象),以及物體在@event.EntityEntry.LoadedState

*列表NHibernate的3.0,和我的工作與活動造成this和使用FlushEntity原因this

+0

爲什麼你想在更新期間恢復舊狀態? – 2012-03-30 05:23:43

+0

審覈修改。這裏有一些概念問題? 該監聽器應記錄更改的實體。 – Custodio 2012-03-30 12:31:48

+1

所以你不想恢復舊狀態,你只想訪問原始值。 – 2012-03-30 13:38:21

回答

1

@event.LoadedState包含數組中的先前值,@event.PropertyValues包含當前值。相應的persister.PropertyNames包含相同順序的屬性名稱和NH類型。

例子:

for (int i = 0; i < @event.PropertyValues.Length; i++) 
{ 
    Console.WriteLine("Property {0} : {1} => {2}", 
    @event.EntityEntry.Persister.PropertyNames[i], 
    @event.LoadedState[i], 
    @event.PropertyValues[i]); 
} 

我不知道如果「LoadedState」其實是已經載入的狀態。它可能是數據庫中的狀態,可能隨着每次刷新而改變。檢查這個。可能需要採取從事件中獲得的「首次加載狀態」。

注:我寫了一個「自動審計線索作家」。複雜的實體變得非常複雜。最複雜的是對象的嵌套(父母 - 孩子)。事件發生在NH的深處。您需要處理組件和集合。