2009-06-03 49 views
0

我知道很多表審覈方法。有些是基於觸發器的,並且要求每個表上的觸發器進行審計。 SOme有基於列數據類型的限制。我如何使用像NLog或Log4Net這樣的日誌框架。我希望我的日誌(在表中)回答問題「此時誰更新了此表中此列從val0到val1的這一列?」如何使用NLog/Log4Net自動執行數據庫更改跟蹤?

我還沒有決定OR映射器。傾向於NHibernate或EF。

在此先感謝!

回答

2

如果您使用像DAO這樣的模式(我在Hibernate中用Java成功使用它),您可以爲數據庫中的每個更改添加一個條目。如果使用Spring.NET,則可以使用AOP將攔截器添加到訪問數據庫的DAO的方法中。

無論如何,你可能想爲DAOs包添加一個特殊的appender,因爲它會非常冗長。

+0

傾向於Postsharp ..但AOP聽起來很不錯 – Perpetualcoder 2009-06-05 10:09:06

1

Victors的答案是一流的,但我想補充一點,這可能很難,這取決於你的列 - >對象映射如何工作。

如果您將表列映射到對象屬性和具有不同名稱的字段,那麼我認爲您會考慮嘗試解析sql信息以確定哪個列已更新。例如,如果您更改了「Product.Price」的值並且實際映射到名爲「final_price」的列,那麼您的日誌記錄將不會完全匹配數據庫中發生的情況。

此外這可能是錯誤的,但如果您通過ORM包與斷開連接的實體一起工作,我不確定是否可以使用更改跟蹤信息。我隱約記得一個問題,我讀到了你列出的某個ORM在哪裏更新每一列,所以當用戶真的更新了一列時,用戶改變了表中的所有列。