2015-03-04 5 views
1

im, использующее Entity Framework6 в моем решении, и теперь мне нужно отслеживать изменения в базе данных, но не могу понять, как это сделать. Есть ли способ отслеживать изменения в базе данных с помощью Entity Framwork?EF отслеживание изменений в базе данных

обновление: Я нашел это решение, его использование SqlDependency в пути, что позволяет использовать его с рамкой Entity.

http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server

+2

Да, SqlDependency Class позволяет изменения данных мониторинга в базе данных. Вот пример: http://dotnet.dzone.com/articles/c-sqldependency-monitoring – rba

+2

Вы имеете в виду изменения в схеме или данных? – codeRecap

+0

@GiorgiZautashvili, отслеживание базы данных, а не отслеживание этого объекта ObjectStateManager. – Spirosi

ответ

1

Вы можете перезаписать метод SaveChanges() для отслеживания изменений. Вот несколько примеров из одного из наших приложений:

public override int SaveChanges() 
{ 
    ChangeTracker.DetectChanges(); 
    var entries = ChangeTracker.Entries<IAuditable>(); 
    if (entries != null) 
    { 
     foreach (DbEntityEntry<IAuditable> entry in entries) 
     { 
      switch (entry.State) 
      { 
       case EntityState.Added: 
        entry.Entity.SystemFields = new SystemFields 
        { 
         SysActivityCode = ActivityCode, 
         SysCreationUser = UserId, 
         SysCreationDate = DateTime.UtcNow 
        }; 
        break; 
       case EntityState.Modified: 
        entry.Entity.SystemFields.SysModificationDate = DateTime.UtcNow; 
        entry.Entity.SystemFields.SysModificationUser = UserId; 
        entry.Entity.SystemFields.SysActivityCode = ActivityCode; 
        break; 
      } 
     } 
    } 

    return base.SaveChanges(); 
} 

где SystemFields является ComplexType добавляется ко всем записям, которые реализуют интерфейс IAuditable:

public interface IAuditable 
{ 
    /// <summary> 
    /// System fields who contain change and status information 
    /// </summary> 
    SystemFields SystemFields { get; set; } 
} 

[ComplexType] 
public class SystemFields 
{ 
    /// <summary> 
    /// When has this entry be created 
    /// </summary> 
    [Required] 
    public DateTime SysCreationDate { get; set; } 
    /// <summary> 
    /// Who has created the entry 
    /// </summary> 
    [Required] 
    public string SysCreationUser { get; set; } 
    /// <summary> 
    /// When has this entry been modified 
    /// </summary> 
    public DateTime? SysModificationDate { get; set; } 
    /// <summary> 
    /// Who has updated the entry 
    /// </summary> 
    [CanBeNull] 
    public string SysModificationUser { get; set; } 
    /// <summary> 
    /// Which activity has created/changed this entry 
    /// </summary> 
    [Required] 
    [StringLength(32)] 
    public string SysActivityCode { get; set; } 
} 
Смежные вопросы