Я пытаюсь переместить информацию в мою базу данных postgresql во время миграции.данные, хранящиеся в одной таблице, разделяются на множество с таблицей, связывающей их с помощью внешних ключей.
Старая таблица: itemsInBag
ID
name
baglabel
Новые таблицы: item, itemsInBag, bag
item
Id
Name
itemsInBag
Id
ItemId
BagId
bag
Id
BagLabel
В настоящее время у меня есть эти операторы SQL, чтобы попытаться связать их вместе.Это делается после добавления новых таблиц и полей и до удаления полей itemsInBag. #
migrationBuilder.Sql(
"INSERT INTO items (Name)" +
"SELECT (name) FROM itemsInBag");
migrationBuilder.Sql(
"INSERT INTO bag baglabel" +
"SELECT DISTINCT baglabel FROM itemsInBag");
migrationBuilder.Sql(
"UPDATE itemsInBag SET bagid =(SELECT id FROM bag WHERE bag.baglabel = itemsInBag.baglabel)"
);
migrationBuilder.Sql(
"UPDATE itemsInBag SET itemid =(SELECT id FROM items WHERE items.name = itemsInBag.name)"
);
Я получаю эту ошибку при попытке запустить миграцию
$exception {"23505: could not create unique index \"IX_itemsinbag_bagid_itemid\""} Npgsql.PostgresException
"Key (bagid, itemid)=(0, 0) is duplicated."
Из всего, что я прочитал, может показаться, что это правильный способ сделать это.Есть ли лучший способ сделать это?Есть ли что-то, чего мне не хватает?
ОБНОВЛЕНИЕ: если я перенесу уникальное ограничение на bagid и itemid после операторов SQL, я получу эту ошибку
$exception {"23503: insert or update on table \"itemsinbag\" violates foreign key constraint \"FK_itemsinbag_bag_bagid\""} Npgsql.PostgresException
"Key (bagid)=(0) is not present in table \"bag\"