4

我有两个存储库指向同一个 SQL Server 2008 R2 (10.50.2550.0) 数据库。一个存储库基于实体框架,另一个使用常规 SqlConnection。我需要执行一个涉及两者的操作,所以我使用 aTransactionScope将它们保持在同一个事务中:

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=.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 )

可能是什么问题呢?

干杯。

4

1 回答 1

6

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

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

这就是升级到 MSDTC 的原因!

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

干杯。

于 2012-11-15T14:46:52.063 回答