Я использую 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 () с ошибкой, заключающейся в том, что ParentID в TableB не имеет соответствующей записи первичного ключа в TableA.
Соединение используется повторно.
Как мне обойти это? Выполнение SELECT WITH (NOLOCK) в TableA действительно показывает недавно вставленную родительскую запись, но следующая вставка дочерней записи не может ее увидеть.
Отредактируйте, чтобы уточнить: в цикле foreach
у меня уже есть вставленный, но незадействованный новый ParentID. Проблема заключается в том, что вставка в дочернюю таблицу TableB не выполняется, поскольку FK в таблице TableB для родительской таблицы TableA не может видеть незакрепленный новый идентификатор PK TableA.