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

时间:2012-08-27 20:03:59

标签: 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();
    :   
    }
}

1 个答案:

答案 0 :(得分:0)

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