Я использую 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.
Проблема заключается в том, что вставка в дочернюю таблицу B завершается неудачно, поскольку FK в TableB для родительской таблицы TableA не может увидеть некоммитированный новый идентификатор TableA PK.