事务范围(TransactionScope)升级到MSDTC,尽管我使用相同的连接字符串。

4

我有两个指向同一个SQL Server 2008 R2 (10.50.2550.0)数据库的存储库。一个基于Entity Framework,另一个使用常规的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发生 Message=服务器'MyComputer'上的MSDTC不可用。 Source=.Net SqlClient Data Provider
ErrorCode=-2146232060 Class=16 LineNumber=1 Number=8501
Procedure="" Server=(local) State=2 StackTrace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

可能出了什么问题?

谢谢。

1个回答

6
好的,我发现问题所在。Entity Framework 正在修改我的连接字符串为:
"Data Source=(local);Initial Catalog=mydb;User Id=myid;Password=mypass;Asynchronous Processing=true;Application Name=EntityFrameworkMUE"

这导致了MSDTC的推广!

为了避免这种情况,我在连接字符串中设置了自己的"应用程序名称",现在它可以工作了。

干杯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接