在一些比較重要的業務系統中,通常會要求系統跟蹤數據記錄的變動情況。系統要記錄什麼時間,什麼人,對那些信息進行了變動。 比較簡單的實現方式是在每個表中加入兩個欄位CreatedBy和CreatedAt,見圖1。CreatedBy用來存是誰進行了這次更改。CreatedAt用來存什麼時間進行了這次更改。 ...
在一些比較重要的業務系統中,通常會要求系統跟蹤數據記錄的變動情況。系統要記錄什麼時間,什麼人,對那些信息進行了變動。
比較簡單的實現方式是在每個表中加入兩個欄位CreatedBy和CreatedAt,見圖1。CreatedBy用來存是誰進行了這次更改。CreatedAt用來存什麼時間進行了這次更改。但是這種方式只能保存最後一次進行改動的人和時間。中間的改動歷史都不能保留。改動前的值也不能保留。
圖 1
對於關鍵的信息系統,例如銀行系統,電商系統,公安系統,我們需要保存數據完整的變動信息和歷史。這通常包括進行變更的人,變更發生的時間,所有變更前的數據值,變更後的數據值。
在使用實體框架(Entity Framew)的應用中,可以很方便的實現加入審計信息(Audit trail)跟蹤數據的變動的功能。我們在這裡給大家做一個簡要的介紹。
0. 前提是你使用的實體框架是 code-first.
1. 使用Nuget安裝Tracker Enabled Dbcontext。如果你沒有使用Microsoft.AspNet.Identity;你可以安裝TrackerEnabledDbContext。如果你使用了Microsoft.AspNet.Identity;你需要安裝TrackerEnabledDbContext.Identity. 見圖2.
圖2
2. 修改你的DBcontext。如果你使用了Microsoft.AspNet.Identity。那麼你的DBContext要繼承TrackerIdentityContext<ApplicationUser>,否則你需要繼承TrackerContext。見圖3.
圖 3
3. 修改你的數據層操作方法和業務層的方法。要增加userId的參數把userId的信息傳遞過來。見圖4.修改context.SaveChanges();為context.SaveChanges(userId); userId為更改用戶的Id信息。
圖 4.
4. 更新資料庫。運行Enable-Migrations -Force。再更新資料庫運行 Update-Database。詳細步驟,如果不是很清楚,可以自行網上查詢。
更新完資料庫後,你會發現裡邊增加了兩個新表。一個是AuditLogs。另一個是AuditLogDetails。見 圖5.
圖 5.
5. 我們做一個員工維護的Demo來驗證它的功能。在這個Demo中包括 “增加員工信息”和“更新員工信息”兩個功能。見圖6.
圖 6.
新增加的員工是 10010。
更新的員工是1009。我們將他的employee code 從1006變成1009. Employee Name從周伯通1變成了周伯通。
6. 完成上述操作後。我們查看AuditLogs和AuditLogDetails表。裡邊已經增加了相關的變動信息。 見圖7和圖8.
1) AuditLogs表
圖 7
2. AuditLogDetails表
7. 源代碼下載
a) 源代碼下載
b) 資料庫下載
謝謝大家。歡迎指正和討論!