【问题标题】:C#, Linq2Sql, TransactionScope, "Transaction has aborted.", msdtc, sqlserver 2005C#,Linq2Sql,TransactionScope,“事务已中止。”,msdtc,sqlserver 2005
【发布时间】:2012-03-08 21:25:09
【问题描述】:

我们在 .NET 4 项目中遇到 TransactionScope 问题。

我们已经将 DAL 分割成多个域,也就是说,我们有不同的 Linq2Sql DataContexts 指向同一个数据库。

当在同一个 TransactionScope 中,我们在多个 DataContext 上插入/更新时,就会出现问题,会立即在本地和服务器上弹出一个 msdtc 事务,然后它会在那里挂起 1-2 分钟(猜它超时),然后代码将继续运行,直到 t.Complete() 和随后隐含的 .Dispose 将产生和异常“事务已中止。”。

我们已在本地和服务器上配置 msdtc 以允许所有、无身份验证、完整跟踪级别,但 dtctrace.log 中仍然没有相关信息

我猜这是 msdtc 在启动多个数据库连接时启动的标准程序(即使它与同一个数据库),但为什么会超时?操作没有冲突,我们的域中不可能发生死锁?

已在 Google 上进行了广泛的搜索和测试,希望在这里获得一些经验丰富的经验 :)

【问题讨论】:

    标签: c#-4.0


    【解决方案1】:

    使用 SQL2005,任何跨越多个连接的事务都将升级为 DTC。使用 SQL2008,具有相同连接字符串的多个连接可以参与同一个事务,而无需 DTC。对于您选择的体系结构,如果可以的话,我强烈建议您升级到 SQL2008。 DTC 可以成为正常工作的油漆。

    【讨论】:

    • 为了避免这种情况,我们移至单个数据上下文。谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2011-09-12
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多