【发布时间】:2017-07-17 08:17:05
【问题描述】:
我们的目标是扩展 Entity Framework,使得每次查询到原始数据库时,都会对不同的数据库进行具有相同数据的单独调用。
此行为的目的是跟踪特定数据库上的操作历史记录。历史记录将存储在不同的数据库中,甚至可能存储在不同的服务器中。
以扩展 EF 或使用特定 EF 配置的形式出现这种行为的可能性有哪些?
【问题讨论】:
标签: c# sql sql-server database entity-framework
我们的目标是扩展 Entity Framework,使得每次查询到原始数据库时,都会对不同的数据库进行具有相同数据的单独调用。
此行为的目的是跟踪特定数据库上的操作历史记录。历史记录将存储在不同的数据库中,甚至可能存储在不同的服务器中。
以扩展 EF 或使用特定 EF 配置的形式出现这种行为的可能性有哪些?
【问题讨论】:
标签: c# sql sql-server database entity-framework
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();
}
}
【讨论】: