У меня есть приложение C#, которое должно вставлять одну родительскую запись и, по меньшей мере, четыре записи детей в иерархическом порядке. IOW, родительский контракт применяется к одному или нескольким местоположениям, каждое место имеет один или несколько элементов, каждый элемент имеет одну или несколько служб, и каждая услуга имеет одно или несколько требований. Приложение сначала получает набор порядковых номеров Oracle, по одному от каждой последовательности таблиц для каждой записи. По какой-либо причине (устаревшая база данных) каждая запись имеет не только порядковый номер ее родителя, но и порядковый номер контракта.Вставка записей родителя/ребенка в транзакции A
Итак, код начинает транзакцию, вставляет родителя с порядковым номером родительского уровня, затем пытается вставить запись местоположения, уже заполненную как родительским номером, так и FK, и его собственный порядковый номер таблицы. Тем не менее, я получаю ошибку Oracle-02291, которую нарушает FK, потому что родительский номер не найден.
INSERT into Contracts (contract_sequence_number, ...) values (10437, ...);
INSERT into Locations (location_sequence_number, contract_sequence_number, ...)
values (23733, 10437, ...);
...
Я предполагаю, что это происходит потому, что родитель не был совершен и поэтому недоступен. Однако я не могу зафиксировать родителя, если никаких ошибок дочерних записей, поэтому фиксация перед дочерней вставкой отсутствует.
Я знаю, что это такой общий сценарий, ответ должен быть pre-noob. Но все ответы, которые я нашел, до сих пор подразумевают, что номер родительской последовательности найден «в таблице», чтобы удовлетворить FK.
Любые мысли о том, как я исправить это, очень ценятся.
Рэнди
Вы не можете разделить свою вставку на две отдельные функции? Вернуть идентификатор родительской записи в код C#, а затем использовать ее для выполнения дочерних вставок? – TheGeekYouNeed
Фактически, они находятся в двух отдельных функциях внутри одного и того же блока транзакций. Я просто показываю два оператора SQL, чтобы прояснить мою проблему. – EoRaptor013