【问题标题】:Entity Framework - Returning the same object after insert?实体框架 - 插入后返回相同的对象?
【发布时间】:2013-05-20 23:38:59
【问题描述】:

使用 ADO.NET 和存储过程,很容易从 SQL Server 返回 Scope_Identity() 作为输出参数,这样您就可以立即执行 get 并获取刚刚插入的同一行/对象。我对如何使用 EF 正确实现这一点有点困惑?

我在 CRUD 和业务逻辑的服务层中使用 MVC4、EF5(代码优先/Fluent API)和存储库模式,这样控制器就不必处理 EF 任何数据访问。我的控制器中的一个 Action 将一个 ViewModel 传递给服务层进行插入,但自然还没有 ID。服务层将视图模型转换为域实体模型并将其插入。现在我想将相同的视图模型返回到我的视图中,但是我如何确定它是没有 ID 的同一个对象?似乎应该有一个明显的解决方案,而不必求助于时间戳或 guid。

对不起,如果这是基本的,但我无法找到答案。

【问题讨论】:

  • 不确定“我如何确定它是同一个对象?”是什么意思。如果您传入一个对象,并且您的代码将相同的对象返回给调用者,我无法理解它为什么不是同一个对象以及您如何不能确定它是同一个对象。简单的解决方案,不要传回不同的对象,你可以确定它是一样的。
  • @AaronLS - 我知道这很老,但我想说谢谢。哇,我很讨厌搜索。显然和你一样糟糕。道歉和 tyvm 的链接。很高兴知道它是自动更新的。以为我必须先执行插入,然后是获取。

标签: asp.net-mvc entity-framework-5


【解决方案1】:

当 Entity Framework 插入对象时,INSERT 查询紧随其后的是 SELECT 以将任何数据库生成的值读回对象。这包括 Id 值(如果它是标识列)和任何计算列。

因此,在插入之后,您可以 100% 确定对象处于插入时的状态,并且还包含任何数据库生成的值。

如果你想 200% 确定你能做到

context.Entry(myNewObject).Reload();

也许在高并发的情况下,当您知道插入和实际返回 UI 之间有一段时间时,这可能很有用,但实际上没有必要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多