遵循 Julia Lermas 的关于跟踪更改的 N 层解决方案的“DbContext”一书,我为每个实体提供了一个 State 属性和一个 OriginalValues 字典(通过 IObjectWithState)。构造实体后,我将原始值复制到此字典。请参阅本书的示例(4-23):
public BreakAwayContext()
{
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += (sender, args) =>
{
var entity = args.Entity as IObjectWithState;
if (entity != null)
{
entity.State = State.Unchanged;
entity.OriginalValues = BuildOriginalValues(this.Entry(entity).OriginalValues);
}
};
}
在 BreakAwayContext(继承自 DbContext)的构造函数中,ObjectMaterialized 事件被捕获。为了检索实体的原始值,通过调用 this.Entry(entity) 从上下文中检索 DbEntityEntry。这个电话正在减慢这个过程。此事件处理程序 80% 的时间都花在此调用上。
是否有更快的方法来检索原始值或实体 DbEntityEntry?