3

我有两个存储库指向同一个SQL Server 2008 R2(10.50.2550.0)数据库。一个存储库基于实体框架,另一个使用常规的SqlConnection。我需要执行,涉及到两个操作,所以我使用了一个TransactionScope,让他们在同一事务:TransactionScope提升为MSDTC虽然我使用的连接字符串相同

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。 不幸的是我得到一个异常说:发生消息= MSDTC

System.Data.SqlClient.SqlException服务器上 “我的电脑”是不可用的。源= .net SqlClient数据提供
错误码= -2146232060类= 16 LineNumber上= 1总数= 8501
过程= “” 服务器=(本地)状态= 2堆栈跟踪:在System.Data.SqlClient.SqlConnection.OnError ( SqlException异常,布尔breakConnection)

可能是什么问题?

干杯。

回答

3

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

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

而这正在导致升级到MSDTC!

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

干杯。

相关问题