【问题标题】:Debugging zombie transaction in C#在 C# 中调试僵尸事务
【发布时间】:2018-10-04 21:45:48
【问题描述】:

我有一些生产代码已经工作了几年,上周才开始遇到错误。错误仅发生在将一堆信息插入数据库的特定进程中。

我得到的错误是:“此 SqlTransaction 已完成;它不再可用”这告诉我事务在第一个 SubmitChanges 和第二个 SubmitChanges 之间被提交或回滚。

代码基本上是这样的:

WithTransaction(db => {
// Do a bunch of stuff - insert, update objects
db.SubmitChanges();
// Do a bunch more stuff
db.SubmitChanges(); // <-- This line is throwing the error.
});

WithTransaction 的代码只是打开一个事务,执行指示的操作,然后在 finally 块中关闭事务。 (还有一些错误处理,但这与这个问题无关。

SubmitChanges 只是 System.Data.Linq.DataContext.SubmitChanges() 的包装器

我的假设是第一个 SubmitChanges() 出现问题,导致事务回滚但没有引发错误。所以我想知道是否有一个好方法可以让我调试早期的 SubmitChanges 并查看那里是否有任何问题。

或者,关于如何调试此错误的任何其他想法。

【问题讨论】:

标签: c# sql .net sql-server transactions


【解决方案1】:

问题是运行程序的盒子出现硬件故障,导致传出连接中断。我在尝试从服务器复制文件时发现这一点也失败了。

故事的寓意:如果软件看起来正确,有时那是因为它正确的。

希望这可以帮助遇到同样问题的其他人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多