4

同じSQLServer2008 R2(10.50.2550.0)データベースを指す2つのリポジトリがあります。1つのリポジトリはEntityFrameworkに基づいており、もう1つは通常のSqlConnectionを使用しています。両方を含む操作を実行する必要があるため、を使用TransactionScopeしてそれらを同じトランザクションに保持しました。

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions() { IsolationLevel = IsolationLevel.RepeatableRead }))
{
   _repoA.DoStuff();
   _repoB.DoStuff();
}

両方で同じ接続文字列を使用しているため、次のようになります。

"Data Source=(local);Initial Catalog=mydb;User Id=myid;Password=mypass;Asynchronous Processing=true"

SQL Server 2008 R2は、スケーリングせずに複数の接続を使用できると期待していました。残念ながら、次のような例外が発生します。

System.Data.SqlClient.SqlExceptionが発生しましたサーバー'MyComputer'でMessage=MSDTCを使用できません。Source =.NetSqlClientデータプロバイダー
ErrorCode=-2146232060 Class = 16 LineNumber = 1 Number = 8501
Procedure = "" Server =(local)State = 2 StackTrace:at System.Data.SqlClient.SqlConnection.OnError(SqlException exception、Boolean breakConnection )。

何が問題なのですか?

乾杯。

4

1 に答える 1

6

わかりました、理由がわかりました。Entity Frameworkは、接続文字列を次のように変更しています。

"Data Source=(local);Initial Catalog=mydb;User Id=myid;Password=mypass;Asynchronous Processing=true;Application Name=EntityFrameworkMUE"

そしてそれがMSDTCへの昇進を引き起こしています!

これを回避するために、接続文字列に独自の「アプリケーション名」を設定しましたが、これで動作します。

乾杯。

于 2012-11-15T14:46:52.063 に答える