2

このリンクによると: EF Code First DBContext and Transactions

savechanges を TransactionScope using ステートメントでラップする必要があります。

SaveChanges はトランザクション メソッドのように機能するか、トランザクション メソッドであると思いました。

例:

サービスメソッドでは、サービスメソッドの最後に1つのhttpリクエストでさまざまなエンティティを削除および追加しています.1つのコンテキストでSaveChangesを実行します。

複数のコンテキストを持つことはありません。HTTP リクエストの存続期間中に作成され、リポジトリ間で共有される Ninject によって常に同じコンテキスト注入が行われます。

複数の dbcontext がある場合、 TransactionScope で DbContext.SAveChanges をラップするだけでよいというのは本当ですか? - これらは分散トランザクションとも呼ばれる複数のデータベースである可能性があるため - ?

4

1 に答える 1

3

次の場合、別の TransactionScope で SaveChanges 呼び出しをラップする必要はありません。

  1. 同じトランザクションで複数のコンテキストを使用しようとしていない場合。
  2. 同じコンテキストでも複数の SaveChanges 呼び出しを行っていない場合。たとえば、削除後に 1 つの SaveChanges、追加後に別の SaveChanges...

要約すると、同じコンテキストで複数の削除/追加操作を実行し、最後に SaveChanges メソッドを 1 回呼び出すことができます。これらはすべて 1 つのトランザクションで適用されます。TransactionScope は、ネストされたトランザクション シナリオがある場合にのみ必要です。

于 2013-02-20T16:32:22.167 に答える