【发布时间】:2011-10-22 23:21:14
【问题描述】:
我正在尝试使用 Context.Refresh 方法恢复 Context 更改,但 Refresh 似乎不是 Context 的成员。
我使用的是 Microsoft ADO.NET Entity Framework 4.1 RC 版本。
有什么想法吗?
【问题讨论】:
标签: entity-framework objectcontext
我正在尝试使用 Context.Refresh 方法恢复 Context 更改,但 Refresh 似乎不是 Context 的成员。
我使用的是 Microsoft ADO.NET Entity Framework 4.1 RC 版本。
有什么想法吗?
【问题讨论】:
标签: entity-framework objectcontext
您可能正在查看DbContext,它没有Refresh 方法。您可以使用IObjectContextAdapter 接口获取底层ObjectContext,并在其上调用Refresh。
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
【讨论】:
您还可以在代理对象上使用重新加载功能...这是重新加载所有修改对象的示例:
var modifiedEntries = context.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Modified);
foreach (var modifiedEntry in modifiedEntries) {
modifiedEntry.Reload();
}
【讨论】:
这个帖子中发布的答案也可能有帮助:Refresh entity instance with DbContext
不过,总而言之,您可以尝试调用如下代码:
dbContext.Entry(someEntityObjectInstance).Reload();
但是,其他人指出这不会刷新导航属性,因此如果您还需要担心刷新导航属性,您要么需要 Reload() 所有导航属性,要么需要 Detach () 或 Refresh() 转换为 IObjectContextAdapter 后,或者只是重新创建您的 DbContext。
就我而言,坦率地说,我认为最好只是重新创建上下文并重新查找()实体:
dbContext = new Model.Entities();
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey);
可以说这里没有简单/最佳的答案。
【讨论】: