我正在EF中使用MVC3應用程序構建某種審計行爲,並且我嘗試了幾種方法,試圖避免對代碼造成嚴重影響,當然,還試圖避免儘可能多的額外代碼,因爲應用程序完成了35%的工作。審計EF沒有T4
Audit
對象看起來像這樣:
- AuditId
- 用戶ID
- OperationId
- 的moduleId
- 時間戳
- 淨荷
- <模塊>
- <操作>
- <用戶>
的想法去如下:
我創建了一個局部類隱藏SaveChanges()
並覆蓋SaveChanges(SaveOptions)
。
然後我創建了兩個重載的同一個方法來接收我的實體作爲參數和/或不是SaveOptions
枚舉參數。
除了明顯的新SaveChanges()
,將我的Audit
實體的屬性,但這裏的問題發生:我需要一個User
,Module
和Operation
。
我目前的解決方案來解決這個問題如下:
- 我已經聲明在構造函數類水平的
Audit
對象。 - 在控制器的構造函數中,我將
User
設置爲我的Audit
對象。 - 在每種方法中,我根據需要設置
Operation
。 - 在保存更改中,我處理來自
ObjectStateManager
的有效負載(在本例中爲xml)。
I'm very skeptic about this approach, it seems to be a little intrusive to my code. I've read lots of posts here in SO, but none of them helped me to improve this approach nor decide to change it. So please avoid linking things I've probably already read.
審計最好在數據庫級別使用觸發器完成。 –