【问题标题】:Entity Framework 4.1 - Refresh is not a member of ContextEntity Framework 4.1 - Refresh 不是 Context 的成员
【发布时间】:2011-10-22 23:21:14
【问题描述】:

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

我使用的是 Microsoft ADO.NET Entity Framework 4.1 RC 版本。

有什么想法吗?

【问题讨论】:

    标签: entity-framework objectcontext


    【解决方案1】:

    您可能正在查看DbContext,它没有Refresh 方法。您可以使用IObjectContextAdapter 接口获取底层ObjectContext,并在其上调用Refresh。

    var objectContext = ((IObjectContextAdapter)context).ObjectContext;
    

    【讨论】:

    • 荣誉“漂流”,你为我节省了一天。这个问题有 LOTS 的答案,而你的答案是迄今为止最好的! DbContext 不直接支持 Refresh 真的太糟糕了?这似乎是多层应用程序中非常常见的模式。在我看到你的答案之前,我已经接近于重新读取对象,并复制更改的内容:-)
    【解决方案2】:

    您还可以在代理对象上使用重新加载功能...这是重新加载所有修改对象的示例:

                var modifiedEntries = context.ChangeTracker.Entries()
                    .Where(e => e.State == EntityState.Modified);
                foreach (var modifiedEntry in modifiedEntries) {
                    modifiedEntry.Reload();
                }
    

    【讨论】:

      【解决方案3】:

      这个帖子中发布的答案也可能有帮助:Refresh entity instance with DbContext

      不过,总而言之,您可以尝试调用如下代码:

      dbContext.Entry(someEntityObjectInstance).Reload();
      

      但是,其他人指出这不会刷新导航属性,因此如果您还需要担心刷新导航属性,您要么需要 Reload() 所有导航属性,要么需要 Detach () 或 Refresh() 转换为 IObjectContextAdapter 后,或者只是重新创建您的 DbContext。

      就我而言,坦率地说,我认为最好只是重新创建上下文并重新查找()实体:

      dbContext = new Model.Entities();
      someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey);
      

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

      【讨论】:

        猜你喜欢
        • 2011-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2012-05-15
        相关资源
        最近更新 更多