1

ストアドプロシージャを記述せずに、最初にコードでトランザクションを実装する方法はありますか?

ファイナルテーブルエントリを作成する前に、一意のGUIDを使用してマルチテーブルエントリを作成する必要があるシナリオがいくつかあります。これはEFだけを使用してコーディングできるものですか?

4

1 に答える 1

2

DbContext.SaveChanges()メソッドはトランザクションを使用します。したがって、これはAtomicであり、ストアドプロシージャを使用する必要はありません。unitOfWorkパターンは、これを実現するためにEF自体に実装されています。
ただし、2つのDbContextインスタンスを使用してジョブを実行しているとすると、次のようなトランザクションスコープで作業をラップする必要があります。

using (var scpe=new TransactionScope()){
...
context1.SaveChanges();
....
context.SaveChanges();

scope.Complete();
}

SaveChangesはトランザクション内で動作します。SaveChangesはそのトランザクションをロールバックし、ダーティなObjectStateEntryオブジェクトのいずれかを永続化できない場合は例外をスローします。

ドキュメントを参照してください

于 2012-05-03T09:37:38.717 に答える