我對審計有非常明確的需求。NHibernate Envers:基於屬性值的審計實體
考慮下面的類(我改變了我的課的名稱和修剪簡單起見不必要的代碼)
[Audited]
public class Client
{
[NotAudited]
public virtual IList<Order> Orders {get; set;}
}
當訂單屬性不爲空的用戶實體應該只審覈。
這是否可能?如果是這樣,我該怎麼做?
我對審計有非常明確的需求。NHibernate Envers:基於屬性值的審計實體
考慮下面的類(我改變了我的課的名稱和修剪簡單起見不必要的代碼)
[Audited]
public class Client
{
[NotAudited]
public virtual IList<Order> Orders {get; set;}
}
當訂單屬性不爲空的用戶實體應該只審覈。
這是否可能?如果是這樣,我該怎麼做?
如果您想基於某種狀態關閉運行時的審計,則可以創建自己的自定義子類AuditEventListener
,並將該類型的實例傳遞給IntegrateWithEnvers
方法。
在你的子類,可以覆蓋OnPostDelete
,OnPostInsert
,OnPostRecreateCollection
,OnPostUpdate
,OnPreRemoveCollection
和OnPreUpdateCollection
。在你的情況下,你應該檢查evt.Entity
和evt.AffectedOwnerOrNull
。如果你想審計,只需調用base方法,如果你不想審計,在你的實現中什麼也不做。
但是請注意,如果您只是使用Envers進行簡單日誌記錄,那麼您應該只是這樣做。如果您使用它來重新創建歷史實例,則在加載歷史實例時,「刪除」某些歷史事件的審計可能會導致問題。如果您遇到這種情況,只要一個實體在其整個生命週期中有或沒有得到Orders
,就可以這麼做。
感謝您的回覆。你的答案的第一部分很好,最後一段不是很多:)我需要在某些時候顯示歷史記錄。所以最好記錄一切,我會過濾出歷史記錄。 – Sam