EntityFrameworkを使用するWebアプリケーションがあります。TransactionScopeクラスを使用してアンビエントトランザクションを提供します。
DTCトランザクションよりも標準のT-SQLトランザクションを使用するようにEFに指示する方法はありますか?1つのEntityContextと1つのTransactionScopeインスタンス内のさまざまなテーブルに対して多くのクエリを実行することがよくありますが、これは常にトランザクションをDTCにプロモートするようです。
簡単な例をまとめました。以下を参照してください。個々のテーブルへのクエリはT-SQLトランザクションを正しく開始し、接続SPID 54にありました次にContactUsテーブルへのクエリが行われ、EFはトランザクションを促進する効果がある別の接続(SPID 53)でこれを行いますDTCトランザクションに。**
using (MyEntities DB = new MyEntities())
{
using (TransactionScope t = new TransactionScope())
{
DB.Individual.First().EmailAddress = "bob" + DateTime.Now.Second.ToString() + "@bob.com"; // done on connection 54
DB.ContactUs.First(); // done on connection 53 thus promoting the transaction!!
DB.SaveChanges();
t.Complete();
}
}