sql-server - 如何在 sql server 中创建审计表?我需要创建每个审计表或者可以管理单个表的所有审计

标签 sql-server asp.net-mvc database entity-framework

我正在使用 MVC5。创建 Entity Framework 。我总共有 15 张 table 。现在我想在我的项目中进行最近的事件。我有计划使用审计表。我需要创建审计每个表或单个表可以管理?审计表中有哪些字段?

我有 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 表。审计表中有哪些字段?如何使用审计表 Entity Framework ?

最佳答案

我们使用如下实体:

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 属性表示发生了何种类型的更改,例如“更新”、“插入”或“删除”。更改前后的列值作为 JSON 保存在 Changes 列中,如下所示:

[{"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 属性中,最后表名和用户名分别保存在 TableNameUsername 属性中。当然,这个实体被映射到数据库中的一个表,并且数据被持久化在那个表中。

如果您使用的是 Entity Framework ,您可以覆盖 DbContext.SaveChanges() 方法并获取所有 ChangeTracker.Entries().Where(e=>e.State != EntityState.Unchanged ) 项目并使用这些项目创建您的审计数据。

关于sql-server - 如何在 sql server 中创建审计表?我需要创建每个审计表或者可以管理单个表的所有审计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38630397/

相关文章:

php - MySQL 中的外键是强制性的吗?

string - 在Elasticsearch中对关键字查询的句子

C# SQL 查询结果到文本框

c# - 带有 VaryByCustom 的 OutputCache 不起作用

sql-server - 如何使用 Dapper 调用 UDF?

asp.net-mvc - 通过 JQuery 发布时 Web API Controller 中的 ModelState 为空

asp.net - 丢失 ASP.NET/SQL Server 的 session 状态

java - rrdtool 的替代品?

c# - 数据集中关系的目的是什么?

SQL 数据库处于恢复模式