2015-11-22 1 views
2

У меня есть база данных, основанная на Entity Framework, с несколькими объектами/моделями/таблицей. Напр. Documents Модель, я хочу отслеживать все изменения в каждой записи в этой таблице, в отдельной таблице под названием DocumentChanges Модель/Таблица.Как включить отдельную таблицу аудита в платформе Entity

Не могли бы вы направить меня на , как включить/включить EF для отслеживания/аудита всех изменений в таблицу в отдельной таблице?, а не только метку даты, но сохраните полную запись для каждого изменения в отдельной таблице.

ответ

2

Библиотека Audit.EntityFramework может помочь вам сделать то, что вы хотите.

Вам нужно будет реализовать свой собственный DataProvider для хранения данных, отформатированных по вашему желанию.

Например:

void StartUp() 
{ 
    //Setup to use your own provider to store the data 
    Audit.Core.Configuration.Setup() 
     .UseCustomProvider(new YourDataProvider()); 

    //Setup to audit EF operations only for the table Documents 
    //(Your DbContext must inherit from AuditDbContext) 
    Audit.EntityFramework.Configuration.Setup() 
     .ForAnyContext(x => x.IncludeEntityObjects()) 
     .UseOptIn() 
      .Include<Documents>(); 
} 

class YourDataProvider : AuditDataProvider 
{ 
    public override object InsertEvent(AuditEvent auditEvent) 
    { 
     //Get some enviroment info: 
     var userName = auditEvent.Environment.UserName 
     //Get the complete log for the EF operation: 
     var efEvent = auditEvent.GetEntityFrameworkEvent(); 
     foreach(var entry in efEvent.Entries) 
     { 
      // each entry is a modified entity (updated, deleted or inserted) 
      if (entry.Action == "Update") 
      { 
       //You can access the column values 
       var value = entry.ColumnValues["ID"]; 
       //...or the columns changes 
       var changes = entry.Changes.Select(ch => ch.ColumnName + ": " + 
             ch.OriginalValue + " -> " + ch.NewValue); 
      } 
      //... insert into DocumentChanges table 
     } 
     return id; 
    } 
} 
+0

Было бы здорово, если бы он мог также захватить больше информации на основе опций, таких как IP и хост – aggie

+1

Он захватывает хозяина на самом деле, посмотрите на основной выход [здесь] (HTTPS: //github.com/thepirat000/Audit.NET#output). Но IP-адреса могут быть добавлены. – thepirat000

+0

Создание структуры базы данных для SQL Server/Express в 2016 году дает мне ошибки, можете ли вы проверить и обновить – aggie

Смежные вопросы