实体框架 4.1 - 如何“强制”实体框架EF 去数据库而不是使用图?
这是这样的场景,我有一个网站,在单个 HTTP 请求(HTTP POST)中,我需要执行以下操作:
- 抓取一个对象(比如说“标签”)
- 保存一些其他对象(比如说“问题”)
- 获取一个对象“标签”的新副本。
- 重定向到另一个页面,该页面需要“标签”的新副本。
在幕后,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:
- Grab an object (let's say "Tag")
- Save some other object (let's say "Question")
- Get a fresh copy of "Tag".
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
找到我的答案,我想:
现在尝试......
Found my answer, i think:
Trying now...