Linq2Sql 中的池化事务范围

发布于 2024-12-14 21:40:32 字数 497 浏览 1 评论 0原文

如果我将连接字符串中的池设置为 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,但可以使用连接字符串。另外,如果可能的话,我想避免使用分布式事务协调器。

If I have pooling in the connection string set to true the following code works fine. If turned of it fails with: "MSDC is unavailable".

Is it just pure luck that both DataContext's picks the same connection from the pool when pooling is on or is there some kind of coordination done by the TransactionScope?

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

In my real code I can't currently pass a specific connection to the DataContext but have use the connection string. Also I would like to avoid using the Distributed Transaction Coordinator if possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

‖放下 2024-12-21 21:40:32

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

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

You are getting lucky here because both of your connection strings match, so you are getting the same pooled connection when pooling is enabled. However, the results will be undefined if there are multiple concurrent accesses to connections with this connection string, because you may not get the same pooled connection in the second DataContext instance.

If you have to create two DataContext objects within the same transaction, then you will need to use the DTC. If you can't use the DTC, then you'll need to find a way to use only one DataContext object within the transaction.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文