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

C# 使用单个TransactionScope包装大量数据库更新时出现异常,c#,linq-to-sql,transactionscope,C#,Linq To Sql,Transactionscope,我得到与当前连接关联的事务已完成但尚未处理的异常。必须先释放事务,然后才能使用连接执行SQL语句。当我使用TransactionScope包装在多次调用UpdateItem子例程中发生的大量数据库更新时。有人能帮助理解这个错误的含义,以及在foreach中出现异常时保留回滚功能的同时重构代码的正确方法吗 static void Foo() { using (TransactionScope transactionScope = new 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有一个超时。当它被命中时,事务被回滚。指定更大的超时值。

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

什么可以工作?有什么帮助吗?在大多数情况下,我的WCF服务都会出现相同的错误。它工作得很好,然后它最近开始抛出这个错误。它能工作吗?有什么帮助吗?在大多数情况下,我的WCF服务都会出现相同的错误。它工作正常,然后最近开始抛出此错误。我已经将timeout DataContext.CommandTimeout设置为Int32.MaxValue。这不是TScope的超时。那个不一样。它最多只能在TScope的ctor中设置10分钟。我已经将timeout DataContext.CommandTimeout设置为Int32.MaxValue。这不是TScope的超时。那个不一样。最多只能在TScope的ctor中设置10分钟。