如果我将连接字符串中的池设置为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,但已使用连接字符串。另外,如果可能的话,我想避免使用分布式事务处理协调器。
答案 0 :(得分:2)
您在这里很幸运,因为两个连接字符串都匹配,因此在启用池时获得相同的池连接。但是,如果对此连接字符串的连接有多个并发访问,则结果将是未定义的,因为您可能无法在第二个DataContext实例中获得相同的池连接。
如果必须在同一事务中创建两个DataContext对象,则需要使用DTC。如果你不能使用DTC,那么你需要找到一种在事务中只使用一个DataContext对象的方法。