实体框架4.1 - 刷新不是Context的成员

时间:2011-10-22 23:21:15

标签: entity-framework objectcontext

我正在尝试使用Context.Refresh方法恢复上下文更改,但似乎Refresh不是Context的成员。

我正在使用Microsoft ADO.NET Entity Framework 4.1 RC版本。

有什么想法吗?

3 个答案:

答案 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);

这里可以说没有简单/最好的答案。