gpt4 book ai didi

entity-framework - DbContext.Entry 性能问题

转载 作者:行者123 更新时间:2023-12-04 10:19:40 24 4
gpt4 key购买 nike

遵循 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?

最佳答案

Context.Entry() 调用 DetectChanges()这取决于上下文中的对象数量,并且可能非常慢。在您的情况下,您可以替换为更快的版本 ((IObjectContextAdapter) ctx).ObjectContext.ObjectStateManager.GetObjectStateEntry(obj);

关于entity-framework - DbContext.Entry 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com