Entity Framework 4.1 - 刷新不是 Context 的成员

发布于 2024-12-11 07:13:41 字数 150 浏览 3 评论 0原文

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

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

有什么想法吗?

I'm trying to revert Context changes using the Context.Refresh method but It seems like Refresh is not a member of Context.

I'm using the Microsoft ADO.NET Entity Framework 4.1 RC version.

Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空名 2024-12-18 07:13:41

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

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

You are likely looking at a DbContext, which does not have a Refresh method. You can use the IObjectContextAdapter interface to get the underlying ObjectContext, and call Refresh on that.

var objectContext = ((IObjectContextAdapter)context).ObjectContext;
迷雾森÷林ヴ 2024-12-18 07:13:41

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

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

You can also use the Reload function on the Proxy Objects... Here is a sample to reload all modified objects:

            var modifiedEntries = context.ChangeTracker.Entries()
                .Where(e => e.State == EntityState.Modified);
            foreach (var modifiedEntry in modifiedEntries) {
                modifiedEntry.Reload();
            }
旧城烟雨 2024-12-18 07:13:41

此线程中发布的答案也可能有帮助:使用 DbContext 刷新实体实例

总之,您可以尝试调用如下所示的内容:

dbContext.Entry(someEntityObjectInstance).Reload();

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

就我而言,我坦率地决定最好只是重新创建上下文并重新 Find() 实体:

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

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

The answer posted in this thread might help too: Refresh entity instance with DbContext

In summary though, you might try calling something like the following:

dbContext.Entry(someEntityObjectInstance).Reload();

However, someone else noted that this doesn't refresh navigation properties, so if you have to worry about refreshing navigation properties as well, you either need to Reload() all of the navigation properties as well or you will need to Detach() or Refresh() after casting to IObjectContextAdapter, or maybe just recreate your DbContext.

In my case, I frankly decided it was best just to recreate the context and re-Find() the entity:

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

There is arguably no simple/best answer here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文