2017-07-17 21 views
2

目標是擴展實體框架的方式是,對於原始數據庫的每個查詢,將具有相同數據的單獨調用發送到不同的數據庫。用於存儲有關查詢的信息的擴展實體框架

此行爲的目的是跟蹤特定數據庫上的操作的歷史記錄。歷史將存儲在不同的數據庫中,甚至可能存儲在不同的服務器中。

以EF的擴展形式或使用特定的EF配置形式具有這種行爲的可能性是什麼?

回答

0

EF DataContext作爲部分類實現。你可以覆蓋SaveChanges做你需要的東西(我假設你的DataContext被稱爲EfEntities):

public partial class EfEntities 
{ 
    public override int SaveChanges() 
    { 
     var changes = from e in this.ChangeTracker.Entries() 
         where e.State != System.Data.Entity.EntityState.Unchanged 
         select e; 

     foreach (var change in changes) 
     { 
      if (change.State == System.Data.Entity.EntityState.Added) 
      { 
       // Handle added entities 
      } 
      else if (change.State == System.Data.Entity.EntityState.Modified) 
      { 
       // Handle modified entities 
       var item = change.Cast<IEntity>().Entity; 
       var originalValues = this.Entry(item).OriginalValues; 
       var currentValues = this.Entry(item).CurrentValues; 

       foreach (string propertyName in originalValues.PropertyNames) 
       { 
        var original = originalValues[propertyName]; 
        var current = currentValues[propertyName]; 

        if (!Equals(original, current)) 
        { 
         // log propertyName: original --> current 
        } 
       } 
      } 
      else if (change.State == System.Data.Entity.EntityState.Deleted) 
      { 
       // Handle deleted entities 
      } 
     } 

     return base.SaveChanges(); 
    } 
}