重新加载实体时的性能问题

时间:2019-07-04 10:24:05

标签: c# performance entity-framework-6 dbcontext objectcontext

我们正在您的EF6桌面应用程序中从ObjectContext切换到DbContext。目前,我在不重新创建整个上下文的情况下,很难从数据库中重新加载数据。不幸的是,我们在某种程度上使用了长期存在的上下文方法,这种方法我很难轻易改变。

要使用数据库中的最新值(商店获胜)重新加载实体的属性(不包含导航属性),请使用CreateObjectSet()中的MergeOption.OverwriteChangesObjectContext。我现在正尝试用DbContext替代它。

我发现了以下选项:

  • DbContext.Entry(entity).Reload()
  • 使用DbContext.Entry(entity).GetDatabaseValues()中的值覆盖实体中每个属性的值
  • 分离实体并再次获取它,例如使用Find()

即使禁用AutoDetectChanges,所有这些选项仍然比使用CreateObjectSet()时要慢得多。顺便说一句:创建一个新的上下文并再次获取值会比较慢,但不会那么慢。

我是否缺少某些东西?或者DbContext是否没有CreateObjectSet()的{​​{1}}的替代选择(除了创建新的上下文)?

0 个答案:

没有答案