Полностью дикая догадка, но ваша конечная точка /api/AddEmployee
не /AddEmployee
?
попробуйте изменить
response = await httpClient.PostAsync("AddEmployee", content);
To
response = await httpClient.PostAsync("api/AddEmployee", content);
Вам не нужно удалять и воссоздавать внешние ключи. Вместо этого используйте отложенные ограничения. Этого достаточно, когда вы определяете внешние ключи как deferrable initially deferred
и выполняете все вставки в одной транзакции. Однако есть больше вариантов, поэтому читайте об отложенных ограничениях в документации:
Использовать системный каталог pg_constraint
.
Вы можете сгенерировать скрипт для изменения внешних ключей на DEFERRABLE INITIALLY DEFERRED
следующим образом:
select format(
'ALTER TABLE %s ALTER CONSTRAINT %s DEFERRABLE INITIALLY DEFERRED;',
conrelid::regclass::text,
conname)
from pg_constraint
where contype = 'f'
and conrelid = any(array['table1', 'table2', 'table3']::regclass[])
and connamespace = 'ssp2_pcat'::regnamespace;
Вы можете запустить скрипт один раз. Тогда ваш скрипт импорта может выглядеть так:
BEGIN;
TRUNCATE table1;
TRUNCATE table2;
...
INSERT INTO table1...
INSERT INTO table2...
...
COMMIT;
Если по какой-то причине вы не можете использовать отложенные ограничения, используйте сценарий для удаления ограничений:
select
format(
'ALTER TABLE %s DROP CONSTRAINT %s;',
conrelid::regclass::text,
conname)
from pg_constraint
where contype = 'f'
and conrelid = any(array['table1', 'table2', 'table3']::regclass[])
and connamespace = 'ssp2_pcat'::regnamespace;
и для воссоздания их:
select
format(
'ALTER TABLE %s ADD CONSTRAINT %s %s;',
conrelid::regclass::text,
conname,
pg_get_constraintdef(oid))
from pg_constraint
where contype = 'f'
and conrelid = any(array['table1', 'table2', 'table3']::regclass[])
and connamespace = 'ssp2_pcat'::regnamespace;