ストアドプロシージャを記述することなくトランザクションを最初にコードに実装する方法はありますか?Entity Framework 4.1のアトミックトランザクションストアドプロシージャを使用しないコードファースト
最終的なテーブルエントリを作成する前に、複数のテーブルエントリを一意のGUIDで作成する必要があるシナリオがいくつかあります。これはEFだけでコード化できるものですか?
ストアドプロシージャを記述することなくトランザクションを最初にコードに実装する方法はありますか?Entity Framework 4.1のアトミックトランザクションストアドプロシージャを使用しないコードファースト
最終的なテーブルエントリを作成する前に、複数のテーブルエントリを一意のGUIDで作成する必要があるシナリオがいくつかあります。これはEFだけでコード化できるものですか?
DbContext.SaveChanges()
メソッドはトランザクションを使用します。つまり、Atomicであり、ストアドプロシージャを使用したくない場合です。 unitOfWorkパターンは、これを達成するためにEF自体で実装されています。
しかし、その後、あなたは、このようなトランザクション・スコープを使用して作業をラップする必要がある、あなたはDにあなたの仕事を2つのDbContextのインスタンスを使用しているとしましょう
using (var scpe=new TransactionScope()){
...
context1.SaveChanges();
....
context.SaveChanges();
scope.Complete();
}
SaveChangesメソッドは、トランザクション内で動作します。 SaveChangesはそのトランザクションを ロールバックし、汚れた ObjectStateEntryオブジェクトのいずれかが永続化できない場合に例外をスローします。
(1)あなたはDbContext.SaveChangesは、()、本質的に私たちが明示的に指定しなくても、アトミック性を実装することを意味しますか?どのような場合にはオフにできますか? –
(2)また、私は2つのデータベースのコードを理解していませんでした。トランザクションスコープは、独立したオブジェクトとして宣言されているようです。両方のコンテキストオブジェクトは、それらが単一のスコープ内にあることをどのように知っていますか? –
実際には2番目のコメントは気にしません。私は.NET環境トランザクションについて知らなかったし、それらを読んでいる。 –