Мы используем объект, как показано ниже:
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)
и создать свои данные аудита с помощью этих элементов.
Ознакомьтесь с библиотекой [Audit.EntityFramework] (https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework#auditentityframework). – thepirat000