最初に EF5 コードを使用してSaveChanges()
おり、同じトランザクションで複数の呼び出しをラップする必要があります。私はtransactionScopeの使用に比較的慣れていないため、目的を達成するためにオプションを微調整することはできません。
次のコードは、私の DbContext クラスのインスタンスが挿入されるサービス クラスにあります。このクラスのどこにも DbContext の追加インスタンスを作成しません。
まずは以下を試してみました。SaveChanges
コードは素晴らしくきれいですが、関数内のメソッド中に DTC にエスカレートしようとしGenerateInvoice
ます。
using (var scope = new TransactionScope())
{
// This function does some work and calls SaveChanges
Guid invoiceId = GenerateInvoice(cart);
// This function also does some querying and calls SaveChanges
DeleteCart();
// Transaction should only commit if both functions above were successful
scope.Complete();
}
私はいくつかの調査を行い、コードを次のように変更しましたが、これは DTC にエスカレートしませんが、それが最善のアプローチであるかどうかはわかりません。
IObjectContextAdapter adapter = (IObjectContextAdapter)_context;
adapter.ObjectContext.Connection.Open();
using (var scope = new TransactionScope())
{
// This function does some work and calls SaveChanges
Guid invoiceId = GenerateInvoice(cart);
// This function also does some querying and calls SaveChanges
DeleteCart();
// Transaction should only commit if both functions above were successful
scope.Complete();
adapter.ObjectContext.Connection.Close();
}
SaveChanges
DTC にエスカレートせずに、最初に複数の EF5 コードでトランザクション サポートを取得する簡単な方法はありますか?
ありがとう