【发布时间】: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 并查看那里是否有任何问题。
或者,关于如何调试此错误的任何其他想法。
【问题讨论】:
-
这不是一大堆代码。如果您还没有看过,不妨试试looking at this StackOverflow thread 让其他可能遇到过您的问题的人。
标签: c# sql .net sql-server transactions