扩展实体框架以存储有关查询的信息

时间:2017-07-17 08:17:06

标签: c# sql sql-server database entity-framework

目标是以对每个查询到原始数据库的方式扩展实体框架,将对不同的数据库进行具有相同数据的单独调用。

此行为的目的是跟踪特定数据库上的操作历史记录。历史记录将存储在不同的数据库中,甚至可能存储在不同的服务器中。

以EF扩展或使用特定EF配置的形式有什么可能?

1 个答案:

答案 0 :(得分: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();
    }
}