在C#中调试僵尸交易

时间:2018-10-04 21:45:49

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

我有一些已经使用了几年的生产代码,上周刚开始遇到错误。仅在将大量信息插入数据库的特定过程中才会发生错误。

我得到的错误是:“此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的好方法,看看那里是否出了什么问题。

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

1 个答案:

答案 0 :(得分:0)

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

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

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