【发布时间】:2011-11-10 15:33:59
【问题描述】:
如果我将连接字符串中的池设置为 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,但使用了连接字符串。如果可能的话,我也想避免使用分布式事务协调器。
【问题讨论】:
-
您使用相同类型和相同连接字符串的两个数据上下文的原因是什么?为什么不简单地使用一个 Datacontext?
-
@Pleun 业务逻辑层中的一个函数正在调用数据访问层中的多个函数,每个函数都有自己的数据上下文创建。
-
所以第一个 //Do stuff 是 DataAccessLayer 函数,第二个 //Do stuff 是第二个函数?他们仍然可以使用相同的数据上下文,不是吗?
-
@Pleun 没错。如果他们要使用相同的上下文,则需要对其进行某种生命周期管理或同步,我不能只创建它并将其放入 DAL 类中的变量中,因为我无法确定多长时间和由什么当前访问的其他线程。
-
嗯,生命周期管理和数据上下文不能一起使用。它应该是合乎逻辑的工作单元并且是短暂的。你在做winforms吗?
标签: c# sql-server-2005 linq-to-sql transactionscope