2

根据这个链接:EF Code First DBContext and Transactions

我应该将 savechanges 包装在 TransactionScope using 语句中。

我认为 SaveChanges 的工作方式类似于事务方法。

例子:

在服务方法中,我在服务方法结束时的一个 http 请求中删除和添加不同的实体,我执行 SaveChanges 一个 ONE Con​​text。

我永远不会有多重上下文。它总是由 Ninject 为 http 请求的生命周期创建并在存储库之间共享的相同上下文注入。

那么当我有多个 dbcontext 时,我只需要在 TransactionScope 中包装 DbContext.SAveChanges 是真的吗?- 因为这些可能是多个数据库,也就是分布式事务 - ?

4

1 回答 1

3

如果出现以下情况,则无需将 SaveChanges 调用包装在另一个 TransactionScope 中;

  1. 如果您不尝试在同一事务中使用多个上下文。
  2. 如果即使使用相同的上下文也没有进行多次 SaveChanges 调用。例如,删除后的一个 SaveChanges,添加后的另一个 SaveChanges...

总之,您可以使用相同的上下文执行多个删除/添加操作,最后调用 SaveChanges 方法一次 - 它们都将应用于一个事务。只有当您有嵌套事务场景时,才需要 TransactionScope。

于 2013-02-20T16:32:22.167 回答