我正在尝试使用Context.Refresh方法恢复上下文更改,但似乎Refresh不是Context的成员。
我正在使用Microsoft ADO.NET Entity Framework 4.1 RC版本。
有什么想法吗?
答案 0 :(得分:13)
您可能正在查看DbContext
,其中没有Refresh
方法。您可以使用IObjectContextAdapter
界面获取基础ObjectContext
,并在其上调用Refresh。
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
答案 1 :(得分:2)
您还可以在代理对象上使用重新加载功能...以下是重新加载所有修改对象的示例:
var modifiedEntries = context.ChangeTracker.Entries()
.Where(e => e.State == EntityState.Modified);
foreach (var modifiedEntry in modifiedEntries) {
modifiedEntry.Reload();
}
答案 2 :(得分:0)
此帖子中发布的答案也可能有所帮助:Refresh entity instance with DbContext
总之,您可以尝试调用以下内容:
dbContext.Entry(someEntityObjectInstance).Reload();
但是,其他人注意到这并没有刷新导航属性,因此如果您还要担心刷新导航属性,您还需要重新加载()所有导航属性,否则您将需要在转换为IObjectContextAdapter之后分离()或刷新(),或者只是重新创建DbContext。
在我的情况下,我坦率地决定最好只是重新创建上下文并重新查找()实体:
dbContext = new Model.Entities();
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey);
这里可以说没有简单/最好的答案。