我有一些已经使用了几年的生产代码,上周刚开始遇到错误。仅在将大量信息插入数据库的特定过程中才会发生错误。
我得到的错误是:“此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的好方法,看看那里是否出了什么问题。
或者,或者其他有关如何调试此错误的想法。
答案 0 :(得分:0)
问题是运行该程序的盒子出现硬件故障,这导致传出的连接中断。在尝试从服务器复制文件时,我也发现了这一点。
故事的寓意:如果软件看起来正确,则有时是因为它是是正确的。
希望这可以帮助其他遇到相同问题的人!