2016-07-28 53 views
2

我正在使用MVC5。創建實體框架。我共有15張桌子。現在我想在我的項目中進行最近的活動。我有計劃使用審計表。我需要創建審計每個表或單個表可以管理?審計表內的字段是什麼?如何在sql server中創建審計表?我需要創建每個審計表或可以管理單個表全部審計

我TP_users表

Id int Unchecked 
UserName nvarchar(50) 
UserEmail nvarchar(50)  
DisplayName nvarchar(50)  
Password nvarchar(50)  
RoleId  int 
IsActive bit 
ClientId int 

現在我想創建審覈表TP_users表.whare的領域裏面來審覈表?如何使用審計表實體框架?

+0

請看[Audit.EntityFramework](https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework#auditentityframework)庫。 – thepirat000

回答

1

我們使用實體象下面這樣:

public class Audit 
{ 
    [Required] 
    [StringLength(6)] 
    public string Action { get; set; } 
    public string Changes { get; set; } 
    public string PK { get; set; } 
    [Required] 
    public DateTime RevisionStamp { get; set; } 
    [Required] 
    [StringLength(50)] 
    public string TableName { get; set; } 
    [Required] 
    [StringLength(50)] 
    public string Username { get; set; } 
} 

我們用這個審覈所有的表。 Action屬性說明發生了什麼類型的更改,如「更新」,「插入」或「刪除」。變化之前和之後的列值保存在Changes列的JSON象下面這樣:

[{"FieldName":"ID","ValueBefore":"2","ValueAfter":"2"},{"FieldName":"SettingTypeIndex","ValueBefore":"FiscalYear","ValueAfter":"FiscalYear"},{"FieldName":"Value","ValueBefore":"2015","ValueAfter":"2016"},{"FieldName":"Year","ValueBefore":"0","ValueAfter":"0"},{"FieldName":"DateInserted","ValueBefore":"2016-04-11 8:45:08 AM","ValueAfter":"2016-04-11 8:45:08 AM"},{"FieldName":"DateModified","ValueBefore":"2016-07-28 9:45:46 AM","ValueAfter":"2016-07-28 9:47:17 AM"},{"FieldName":"CreatorUserID","ValueBefore":"b44792db-1fbd-44d2-9f7d-cf05c6a2f922","ValueAfter":"b44792db-1fbd-44d2-9f7d-cf05c6a2f922"},{"FieldName":"UpdaterUserID","ValueBefore":"b44792db-1fbd-44d2-9f7d-cf05c6a2f922","ValueAfter":"b44792db-1fbd-44d2-9f7d-cf05c6a2f922"}]

所以這樣我們就可以使用回滾功能(在需要時)。已更改記錄的主鍵保存在PK屬性中。更改日期保存在RevisionStamp propery中,最後表名和用戶名分別保存在TableNameUsername屬性中。當然,這個實體被映射到數據庫中的一個表,並且數據被保存在該表中。

如果您使用的是entityframework,則可以覆蓋DbContext.SaveChanges()方法並獲取所有ChangeTracker.Entries().Where(e=>e.State != EntityState.Unchanged)項目並使用這些項目創建您的審計數據。

+0

我已經使用存儲過程。那麼審計表還會創建存儲過程? – thenna

+0

如果您使用的是EF,那麼您不需要存儲過程來實現此目的,否則我認爲您應該使用觸發器來知道任何表中發生更改的時間,然後使用存儲過程將數據插入到審計表中。 – Ashkan

+0

我使用實體框架 – thenna