簡體   English   中英

擴展實體框架以存儲有關查詢的信息

[英]Extending Entity Framework for storing information about queries

目的是以一種方式擴展Entity Framework,以便對原始數據庫的每個查詢都將對相同的數據進行單獨的調用,以對另一個DB進行調用。

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

以EF擴展或使用特定EF配置的形式出現這種行為的可能性是什么?

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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM