c# - 使用单个 TransactionScope 包装大量数据库更新时出现异常

标签 c# linq-to-sql transactionscope

我收到异常“与当前连接关联的事务已完成但尚未处理。必须先处理事务,然后才能使用连接执行 SQL 语句。”当我使用 TransactionScope 包装在对 UpdateItem 子例程的多次调用中发生的大量数据库更新时。有人可以帮助理解此错误的含义以及重组代码的正确方法,同时保留在 foreach 中的任何内容失败时回滚的能力(抛出异常)

static void Foo()
{    
    using (TransactionScope transactionScope = new TransactionScope())
    {
        foreach (var item in items)
        {
            UpdateItem(item);
        }

        transactionScope.Complete(); 
    }
}


static void UpdateItem(string item)
{
    using (MyDataContext db = new MyDataContext)
    {
        :
    :
    db.Table1.InsertOnSubmit();
    :
    db.SubmitChanges();
    :
    :
    db.ExecuteCommand(); // I get the exception here
    :
    db.Table2.InsertOnSubmit();
    :
    db.SubmitChanges();
    :   
    }
}

最佳答案

TransactionScope 有超时。当它被击中时,事务被回滚。指定更大的超时值。

关于c# - 使用单个 TransactionScope 包装大量数据库更新时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12148802/

相关文章:

c# - 如何判断 Linq 对象是否已附加到数据上下文?

c# - 如何在 linq to sql 截断后立即提交更改

c# - DTC 防火墙要求?

javascript - 尝试加载一个模型,该模型包含模式中的 2 个不同对象列表

nhibernate - 当数据库发生更改时,您如何管理ORM层?

c# - IIS 8.5 覆盖自定义 JSON 错误响应,而是返回默认的 500 错误响应页面。如何让 IIS 8.5 返回我的自定义错误?

entity-framework - Entity Framework 和交易范围

c# - TransactionInterop.GetDtcTransaction() 抛出 ArgumentNullException ... 有时

c# - 用两个(或更多)连接表填充数据表

c# - 在 Code First Entity Framework 中为数据库中的现有列添加属性到模型