6

SQL 2010 Express ローカル DB に対して、EF 4.3 Code First を使用して MVC3 アプリに TransactionScope の使用を導入しました。スコープ内で SaveChanges を実行しようとすると、MSDTC が見つからないという内部例外とともに、"プロバイダーを開けませんでした" という通知が表示されます。私の知る限り、これは複数の接続文字列を使用した場合にのみ発生するはずです。私は 1 つの DB への接続のみを使用します。アプリには 1 つの文字列しかありません。ただし、複数の DbContext インスタンスを使用していますが、トランザクション スコープ全体で 1 つだけです。

これを解決するにはどうすればよいですか?

4

3 に答える 3

1

アプリケーションが初めて EF を呼び出すと、初期化が行われます (データベースが存在しない場合は構築されます)。この最初の呼び出しが TransactionScope 内にある場合、DTC に昇格します。

これを修正するには、アプリのスタートアップ メソッドで EF を呼び出します。これにより、EF が TransactionScope の外で確実に初期化されます。ここからは、TransactionScope 内に EF への 1 つ以上の呼び出しを含めることができますが、DTC に昇格しません: a) 常にまったく同じ接続文字列を使用し、b) Sql Server 2008 以降を使用している (これはあなたは)。

于 2013-03-01T13:06:36.927 に答える
0

トランザクション スコープがあり、2 つの別々の接続を開くと、それらが同一の接続文字列を持つ同じデータベースにある場合でも、トランザクションが分散トランザクションに昇格されることがわかります。

http://www.bomisofmab.com/blog/?p=184は状況を適切に説明しています。

于 2012-07-12T11:52:03.397 に答える