我有我需要爲插入做數據庫審計Web應用程序/刪除/更新(也許讀)。我使用LINQ作爲我的ORM。使用我在網上找到的一些想法,我想出了一種使用屬性來裝飾我的實體的方法,這些實體具有關聯的審計表。除了當前用戶的id和名稱,修改類型,修改時間以及操作是否成功等字段外,審計表本身還需要包含與原始表相同類型的相同列。審計發生在SubmitChanges期間 - 我的數據上下文是抽象的,我在我的具體實現中繼承和重寫SubmitChanges。抽象數據上下文實際上來自AbstractAuditableDataContext,它擴展了DataContext併爲當前用戶標識和名稱添加了CurrentUser屬性和佔位符。默認情況下,對於沒有登錄用戶的實例,這些爲0和「system」 - 例如在註冊或登錄時可以更新用戶表的某些字段。該應用程序使用ASP.NET MVC以C#編寫。
問題:
什麼來填充我的派生數據上下文的當前用戶屬性的最佳方式?我是否應該創建一個實用程序類,該實用程序類在AuditUtility中進行注入,該實用程序檢查是否已設置CurrentUser,如果沒有,則填充它。對於測試,我會嘲笑這一點,但在實際應用程序中它可能會使用懶惰在會話中加載並獲取/設置它。或者我應該修改數據上下文工廠(由所有控制器使用)來執行此功能。我已經在單元測試期間使用模擬工廠,所以這不涉及創建新類。或者,派生應該在工廠之外完成,並且在創建上下文時注入當前用戶。這將允許我「代表」審計。
我意識到這是有點主觀,但我會很感激你可能貢獻的任何想法/經驗。
謝謝。
數據上下文範圍是每個操作 - 它是非常短暫的。 – tvanfosson 2009-02-26 15:43:21