TransactionScope虽然使用相同的连接字符串,但仍在向MSDTC提升

时间:2012-11-15 13:52:37

标签: transactions sql-server-2008-r2 transactionscope entity-framework-4.3 msdtc

我有两个指向同一个SQL Server 2008 R2(10.50.2550.0)数据库的存储库。一个存储库基于实体框架,另一个存储库使用常规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 could use multiple connections without scalating。 不幸的是,我得到一个例外:

  

System.Data.SqlClient.SqlException在服务器上发生Message = MSDTC   'MyComputer'不可用。 Source = .Net SqlClient数据提供者
  ErrorCode = -2146232060 Class = 16 LineNumber = 1 Number = 8501
  Procedure =“”Server =(local)State = 2 StackTrace:          在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection)

可能是什么问题?

干杯。

1 个答案:

答案 0 :(得分:5)

好的,我找到了原因。实体框架正在将我的连接字符串修改为:

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

这导致了对MSDTC的推广!

为了避免这种情况,我在连接字符串中设置了自己的"Application Name",现在可以正常工作。

干杯。