首次打开的EF4、.Net 4.5、SQL Server 2012上的MSDTC升级
本文关键字:Server SQL 2012 上的 升级 MSDTC Net EF4 | 更新日期: 2023-09-27 18:22:13
我有以下代码:
var scopeOption = TransactionScopeOption.RequiresNew;
var transactionOptions = new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadUncommitted
};
using (new TransactionScope(scopeOption, transactionOptions))
{
var context = new ObjectContext("connection string");
context.Connection.Open(); // <-- This line throws
}
它抛出以下异常:
System.Data.EntityException: The underlying provider failed on Open.
Caused by: System.Data.SqlClient.SqlException, MSDTC on server 'xxxx' is unavailable.
但它只在第一次尝试打开连接时抛出异常。对示例代码的任何后续调用都能正常工作,不要试图联系DTC。
注意:将scopeOption
更改为TransactionScopeOption.Suppress
似乎可以解决此问题,而且由于我没有对数据库执行任何写入操作,因此完全可以接受。
有人能想到为什么在全新的TransactionScope
中打开第一个(也是唯一一个)连接只会在第一次调用代码时导致DTC升级吗?
如果有人遇到这个问题,我解决这个问题的唯一方法就是更改代码,以便在事务范围之外创建上下文。
var scopeOption ...
var transactionOptions ...
var context = new ObjectContext("connection string");
using (new TransactionScope(scopeOption, transactionOptions))
{
context.OpenConnection();
//do other stuff here with the context.
}