2016-07-28 2 views
2

Я использую MVC5. созданная инфраструктура Entity. У меня всего 15 таблиц. теперь я хочу недавнюю активность в моем проекте. У меня есть таблица аудита использования плана. Мне нужно создать аудит для каждой таблицы или отдельной таблицы? какие поля входят в таблицу аудита?Как создать таблицу аудита на сервере sql? мне нужно создать каждую таблицу аудита или смогите управлять одиночной таблицей весь аудит

У меня есть таблица 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, и, наконец, имя таблицы и имя пользователя сохраняются в TableName и Username свойствах соответственно. Конечно, этот объект сопоставляется с таблицей в базе данных, и данные сохраняются в этой таблице.

Если вы используете сущность, вы можете переопределить метод DbContext.SaveChanges() и получить все пункты ChangeTracker.Entries().Where(e=>e.State != EntityState.Unchanged) и создать свои данные аудита с помощью этих элементов.

+0

у меня есть хранимая процедура. то таблица аудита также создает хранимую процедуру? – thenna

+0

Если вы используете EF, для этого вам не нужны хранимые процедуры. В противном случае, я думаю, вы должны использовать триггеры, чтобы знать, когда происходит изменение в любой таблице, а затем используйте хранимую процедуру для вставки данных в таблицу аудита. – Ashkan

+0

Я использую структуру Entity – thenna