代码之家  ›  专栏  ›  技术社区  ›  callisto

TransactionScope中的相关插入失败

  •  1
  • callisto  · 技术社区  · 17 年前

    我正在使用TransactionScope将对象的数据添加到一个数据库中。

    伪代码:

    using (TransactionScope trx = new TransactionScope())
    {
       SqlConnection con = DL.GetNewConn();
       int newParentRecordID = InsertParentIntoTableA(object parent, con);
    
       foreach(obj child in parent.childrenObjects)
       {
           child.ParentID = newParentRecordID ;
           int newChildRecordID =  InsertChildIntoTableB(object child, con);
       }
       trx.Complete();
    }
    

    我在InsertChildIntoTableB()处遇到异常,错误是TableB中的ParentID在TableA中没有匹配的主键条目。

    该连接被重用。

    我该怎么做?在TableA上使用(NOLOCK)执行SELECT确实会显示新插入的父记录,但下面插入的子记录看不到它。

    编辑以澄清:在 foreach 问题是插入子表B失败,因为父表A的表B中的FK无法看到未限制的新表A PK ID。

    2 回复  |  直到 17 年前
        1
  •  0
  •   Dzmitry Huba    17 年前

    旁注-您必须使用TransactionScope.complete实例方法显式完成事务,否则它将回滚。

        2
  •  0
  •   Vadim    17 年前

    如果您有标识列,可以尝试使用 OUTPUT INSERTED 插入语句中的子句。

    a good article 关于这个问题。