ストアドプロシージャを記述せずに、最初にコードでトランザクションを実装する方法はありますか?
ファイナルテーブルエントリを作成する前に、一意のGUIDを使用してマルチテーブルエントリを作成する必要があるシナリオがいくつかあります。これはEFだけを使用してコーディングできるものですか?
ストアドプロシージャを記述せずに、最初にコードでトランザクションを実装する方法はありますか?
ファイナルテーブルエントリを作成する前に、一意のGUIDを使用してマルチテーブルエントリを作成する必要があるシナリオがいくつかあります。これはEFだけを使用してコーディングできるものですか?
DbContext.SaveChanges()
メソッドはトランザクションを使用します。したがって、これはAtomicであり、ストアドプロシージャを使用する必要はありません。unitOfWorkパターンは、これを実現するためにEF自体に実装されています。
ただし、2つのDbContextインスタンスを使用してジョブを実行しているとすると、次のようなトランザクションスコープで作業をラップする必要があります。
using (var scpe=new TransactionScope()){
...
context1.SaveChanges();
....
context.SaveChanges();
scope.Complete();
}
SaveChangesはトランザクション内で動作します。SaveChangesはそのトランザクションをロールバックし、ダーティなObjectStateEntryオブジェクトのいずれかを永続化できない場合は例外をスローします。