我正在使用 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 上执行 SELECT WITH (NOLOCK) 确实会显示新插入的父记录,但下面的子记录插入看不到它。
编辑澄清:在foreach
循环中,我已经插入但未提交的新 ParentID。问题是插入到孩子的 TableB 失败,因为父 TableA 的 TableB 中的 FK 看不到未提交的新 TableA PK ID。