Linq2Sql中具有池的事务范围

时间:2011-11-10 15:34:00

标签: c# sql-server-2005 linq-to-sql transactionscope

如果我将连接字符串中的池设置为true,则以下代码可以正常工作。如果它失败了:“MSDC不可用”。

只是纯粹的运气,当池化时,DataContext从池中选择相同的连接,或者TransactionScope是否进行了某种协调?

using(var scope = new TransactionScope())
{
    using(var db = new DataContext(connectionString))
    {
        //Do stuff
    }
    using(var db = new DataContext(connectionString))
    {
        //Do stuff
    }
    scope.Complete();
}

在我的实际代码中,我目前无法将特定连接传递给DataContext,但已使用连接字符串。另外,如果可能的话,我想避免使用分布式事务处理协调器。

1 个答案:

答案 0 :(得分:2)

您在这里很幸运,因为两个连接字符串都匹配,因此在启用池时获得相同的池连接。但是,如果对此连接字符串的连接有多个并发访问,则结果将是未定义的,因为您可能无法在第二个DataContext实例中获得相同的池连接。

如果必须在同一事务中创建两个DataContext对象,则需要使用DTC。如果你不能使用DTC,那么你需要找到一种在事务中只使用一个DataContext对象的方法。