我们正在您的EF6桌面应用程序中从ObjectContext切换到DbContext。目前,我在不重新创建整个上下文的情况下,很难从数据库中重新加载数据。不幸的是,我们在某种程度上使用了长期存在的上下文方法,这种方法我很难轻易改变。
要使用数据库中的最新值(商店获胜)重新加载实体的属性(不包含导航属性),请使用CreateObjectSet()
中的MergeOption.OverwriteChanges
和ObjectContext
。我现在正尝试用DbContext
替代它。
我发现了以下选项:
DbContext.Entry(entity).Reload()
DbContext.Entry(entity).GetDatabaseValues()
中的值覆盖实体中每个属性的值Find()
即使禁用AutoDetectChanges
,所有这些选项仍然比使用CreateObjectSet()
时要慢得多。顺便说一句:创建一个新的上下文并再次获取值会比较慢,但不会那么慢。
我是否缺少某些东西?或者DbContext
是否没有CreateObjectSet()
的{{1}}的替代选择(除了创建新的上下文)?