База данных Entity Framework First — составные внешние ключи

У меня есть база данных, содержащая пару составных внешних ключей. Например, вот скрипт генерации внешнего ключа:

ALTER TABLE [dbo].[WorkingRosters]  WITH NOCHECK ADD  CONSTRAINT
[FK_WorkingRoster_ShiftLeaveCode] FOREIGN KEY([OrganizationID], [ShiftLeaveCode])
REFERENCES [dbo].[ShiftLeaveCodes] ([OrganizationID], [Code])
GO

Я пытаюсь использовать Entity Framework 5 Database-First для создания модели из этой базы данных. Однако ассоциации для составных внешних ключей не создаются со всеми таблицами и другими простыми внешними ключами.

Как я могу:

  1. вручную создайте эти составные внешние ключи в xml за edmx (мучительно)
  2. иметь структуру сущности, правильно генерирующую эти внешние ключи, чтобы у меня были сопоставления

Спасибо!


person Bo Rohlfsen    schedule 28.11.2012    source источник
comment
В частности, как вы создаете свои сущности? Используете редактор edmx? Используете ли вы собственную стратегию генерации кода?   -  person Heather    schedule 28.11.2012
comment
Является ли OrganizationID и Code составным первичным ключом вашей таблицы ShiftLeaveCodes? Если нет (например, если это просто уникальный индекс), это не сработает.   -  person Ladislav Mrnka    schedule 28.11.2012
comment
Сущности генерируются из базы данных с помощью «Обновить модель из базы данных» в контекстном меню.   -  person Bo Rohlfsen    schedule 30.11.2012
comment
OrganizationID и Code — это просто уникальный индекс, а не первичный. Почему они должны быть первичным индексом?   -  person Bo Rohlfsen    schedule 30.11.2012
comment
Я обновил базу данных, чтобы столбцы OrganizationID и Code составляли составной первичный ключ. При этом я все еще не могу заставить EF автоматически генерировать эти ассоциации и свойства навигации между таблицами.   -  person Bo Rohlfsen    schedule 01.12.2012


Ответы (2)


Entity Framework Database First ведет себя с уникальными ключами не так, как вам нужно. Если вы хотите, чтобы они были свойствами навигации, вы должны установить их как внешние ключи.

Теперь у вас есть выбор: 1) вам просто нужен NavPrs, 2) вам также нужна таблица соединений как сущность.

1) Для этого просто установите эти внешние ключи в качестве составного первичного ключа.

2) Чтобы добиться этого, оставьте их в качестве внешних ключей и объявите столбец идентификатора типа идентификатора для вашей соединительной таблицы и установите его в качестве первичного ключа.

Это должно сработать для вас

person Amin Saqi    schedule 26.07.2013

У меня была такая же проблема в EF6, когда обновление модели из базы данных в Visual Studio не распознавало составной внешний ключ, который ссылался на столбцы в другой таблице с уникальным индексом, но которые не были составным первичным ключом ссылочной таблицы.

После создания столбцов, на которые ссылаются, составного PK в таблице, на которую ссылаются, и повторного выполнения модели «Обновить модель из базы данных» внешний ключ был распознан как свойство навигации.

т.е. создание ссылочных столбцов PK решило проблему для меня в EF6.

person Kolti    schedule 19.01.2021