1

ストアドプロシージャを記述することなくトランザクションを最初にコードに実装する方法はありますか?Entity Framework 4.1のアトミックトランザクションストアドプロシージャを使用しないコードファースト

最終的なテーブルエントリを作成する前に、複数のテーブルエントリを一意のGUIDで作成する必要があるシナリオがいくつかあります。これはEFだけでコード化できるものですか?

答えて

2

DbContext.SaveChanges()メソッドはトランザクションを使用します。つまり、Atomicであり、ストアドプロシージャを使用したくない場合です。 unitOfWorkパターンは、これを達成するためにEF自体で実装されています。
しかし、その後、あなたは、このようなトランザクション・スコープを使用して作業をラップする必要がある、あなたはDにあなたの仕事を2つのDbContextのインスタンスを使用しているとしましょう

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

scope.Complete(); 
} 

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

See the documentation

+0

(1)あなたはDbContext.SaveChangesは、()、本質的に私たちが明示的に指定しなくても、アトミック性を実装することを意味しますか?どのような場合にはオフにできますか? –

+1

(2)また、私は2つのデータベースのコードを理解していませんでした。トランザクションスコープは、独立したオブジェクトとして宣言されているようです。両方のコンテキストオブジェクトは、それらが単一のスコープ内にあることをどのように知っていますか? –

+0

実際には2番目のコメントは気にしません。私は.NET環境トランザクションについて知らなかったし、それらを読んでいる。 –

関連する問題