我正在使用MVC5。创建了实体框架。我有15张桌子。现在我想在我的项目中进行最近的活动。我有计划使用审计表。我需要创建审计每个表或单个表可以管理吗?审计表内部有哪些字段?
我有TP_users表
SELECT state_cd
, SUBSTRING(state_cd,1,1) As Parent0
, CASE WHEN state_cd Like '__[^0]_' THEN SUBSTRING(state_cd,2,2) ELSE '' END As Parent1
, CASE WHEN state_cd Like '___[^0]' THEN SUBSTRING(state_cd,4,1) ELSE '' END As Parent2
FROM yourTable
现在我想创建审计表TP_users表.whare是审计表里面的字段吗?如何使用Audit表实体框架?
答案 0 :(得分: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
属性表示发生了什么类型的更改,例如“更新”,“插入”或“删除”。更改前后的列值将作为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
属性中,最后表名和用户名分别保存在TableName
和Username
属性中。当然,这个实体映射到数据库中的表,数据保存在该表中。
如果您使用的是entityframework,则可以覆盖DbContext.SaveChanges()
方法并获取所有ChangeTracker.Entries().Where(e=>e.State != EntityState.Unchanged)
项,并使用这些项创建审核数据。
答案 1 :(得分:0)
在这里你可以寻求帮助 1. http://www.4guysfromrolla.com/webtech/041807-1.shtml