У меня есть приложение на C #, которое должно вставить одну родительскую запись и как минимум четыре дочерних записи в иерархическом порядке. Таким образом, родительский Контракт применяется к одному или нескольким местоположениям, каждое местоположение имеет один или несколько элементов, каждый элемент имеет одну или несколько служб, и каждая служба имеет одно или несколько требований. Сначала приложение получает набор порядковых номеров Oracle, по одному из каждой последовательности таблиц для каждой записи. По какой-либо причине (устаревшая база данных) каждая запись имеет не только порядковый номер своего родителя, но также порядковый номер контракта.
Таким образом, код начинает транзакцию, вставляет родительский элемент с порядковым номером родительского уровня, затем пытается вставить запись местоположения - уже заполненную как родительским номером в виде FK, так и собственным порядковым номером таблицы. Тем не менее я получаю ошибку Oracle-02291, что FK нарушен, потому что родительский номер не может быть найден.
INSERT into Contracts (contract_sequence_number, ...) values (10437, ...);
INSERT into Locations (location_sequence_number, contract_sequence_number, ...)
values (23733, 10437, ...);
...
Я предполагаю, что это потому, что родитель не был зафиксирован и, следовательно, недоступен. Однако я не могу зафиксировать родительский объект, если любой дочерних записей завершился неудачно, поэтому фиксация перед дочерней вставкой не выполняется.
Я знаю, что это такой распространенный сценарий, ответ должен быть перед нубом. Но все ответы, которые я нашел до сих пор, подразумевают, что родительский порядковый номер находится «в таблице», чтобы удовлетворить FK.
Любые мысли о том, как это исправить, очень ценятся.
Randy