实体框架 - 插入后返回相同的对象?

时间:2013-05-20 23:39:00

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

context.Entry(myNewObject).Reload();

也许在高并发性的情况下,当你知道插入和实际帖子之间有一段时间回到UI时,这可能很有用,但是否则真的没有必要。