0

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

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

抱歉,如果这是基本的,但我无法找到答案。

4

1 回答 1

1

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

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

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

context.Entry(myNewObject).Reload();

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

于 2013-05-21T07:44:48.783 回答