实体框架 4.1 - 如何“强制”实体框架EF 去数据库而不是使用图?

发布于 2024-12-09 03:21:23 字数 674 浏览 0 评论 0原文

这是这样的场景,我有一个网站,在单个 HTTP 请求(HTTP POST)中,我需要执行以下操作:

  1. 抓取一个对象(比如说“标签”)
  2. 保存一些其他对象(比如说“问题”)
  3. 获取一个对象“标签”的新副本。
  4. 重定向到另一个页面,该页面需要“标签”的新副本。

在幕后,2) 涉及影响“标签”上数据的数据库端触发器。

因此,当我执行 3) 时,EF 会从步骤 1) 中提取该对象的相同副本,因为它位于图形/内部内存中(例如相同的连接/上下文),

我需要该对象的“新鲜”副本。

过去,我使用过 Detach,然后执行 EF 查询并从数据库中获取最新的对象。

但我本身无权访问此处的对象(我有一个 DTO,它从我的存储库返回),因此我没有任何内容可传递给 Detach 方法。

有什么办法可以说:

var fresh = db.Tags.Find(1, ignoreGraph: true)

或者还有其他选择吗?

如前所述,我使用的是 Entity Framework 4.1、C# 4(和 ASP.NET MVC 3),

我现在能看到的唯一解决方案是将查询字符串参数传递到下一页,然后获取新副本(因为它是新的上下文、新的图表等)。

Here's the scenario, i have a website, which in a single HTTP request (HTTP POST), i need to do the following:

  1. Grab an object (let's say "Tag")
  2. Save some other object (let's say "Question")
  3. Get a fresh copy of "Tag".
  4. Redirect to another page, which needs a fresh copy of "Tag".

Behind the scenes, 2) involves database-side triggers that affects data on "Tag".

So when i do 3), EF is pulling the same copy of the object from step 1), since it's in the graph/internal memory (e.g same connection/context)

I need a "fresh" copy of the object.

In the past, i've used Detach, then i perform an EF query and the latest object in fetched from the DB.

But i don't have access to the object here per-se (i have a DTO, which is returning from my repository), so i don't have anything to pass to the Detach method.

Is there any way to say:

var fresh = db.Tags.Find(1, ignoreGraph: true)

Or is there another alternative?

As mentioned, i'm on Entity Framework 4.1, C# 4 (and ASP.NET MVC 3)

The only solution i can see right now is to pass a querystring parameter to the next page, which then grabs the fresh copy (since it's a new context, new graph, etc).

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

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

发布评论

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

评论(1

云朵有点甜 2024-12-16 03:21:23

找到我的答案,我想:

Context.Entry<T>(entity).Reload()

现在尝试......

Found my answer, i think:

Context.Entry<T>(entity).Reload()

Trying now...

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