运行两个sp_executesql

时间:2016-02-02 21:01:07

标签: entity-framework tsql

我遇到这种情况,其中EF6用于将对象保存到数据库(分成2个单独的表)。因此,通过在EF中执行SaveChanges(),这会生成2个单独的exec sp_executesql insert...语句。

这是从第一个插入生成的值将用作第二个语句的输入参数。

我注意到的一件事是,当第二个语句在一个案例中失败时,没有写入任何记录。

我启动了SQL-Profiler并且没有看到任何回滚;似乎无法弄清楚这次回滚是如何实际发生的。

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

  

我注意到的一件事是,当第二个陈述在一个案例中失败时,没有写入任何记录。

     

我启动了SQL-Profiler并且没有看到任何回滚;似乎无法弄清楚这次回滚是如何实际发生的。

通过在EF上下文中调用SaveChanges(),对您的实体进行的所有修改(插入,更新,删除等)都将包装到单个SQL事务中。这是EF中的默认行为。

事务的目的是将所有SQL语句作为单个操作,一个工作单元。如果一个语句在中间或结尾处失败,那么所有传递的语句都会回滚,即使是那些成功执行的语句也是如此。

为防止出现这种情况,您可以针对在EF上下文中所做的每项更改单独调用SaveChanges()