Предположим, следующая схема базы данных:
Table A: AId (PK)
Table B: BId (PK)
Table C: CId (PK)
Table AB: AId, BId (composite PK, FKs to A and B), Data
Table BC: BId, CId (composite PK, FKs to B and C), Data
Table ABC: AId, BId, CId, Data
В базе данных ABC
имеет два FK: один для AB
на AId
и BId
и один для BC
на BId
и CId
.
Используйте EF Designer и попытайтесь создать модель из этой базы данных.
Если у вас Include foreign key columns in the model
проверено , это работает; но иметь FK Columns в модели не очень приятно.
Если у вас Include foreign key columns in the model
не отмечен , только один из FK из ABC
будет успешно сопоставлен. Чтобы увидеть, что пошло не так, вам нужно просмотреть .edmx
xml (спасибо Крейг!) и вы увидите эту ошибку:
предупреждение 6037: ограничение внешнего ключа 'FK_ABC_BC' было опущено в модели хранения. Столбец «BId» таблицы «Model.Store.ABC» является внешним ключом, участвующим в нескольких отношениях. Модель сущностей один-к-одному не будет проверена, поскольку возможна несогласованность данных.
Я прочитал единственное упоминание об этой проблеме, которое я могу найти на SO , и я не думаю, что это та же проблема. Я не вижу ничего плохого на уровне дизайна базы данных . Сейчас я собираюсь обойти это, наложив суррогатные ключи на AB
и BC
, но мне бы очень хотелось знать:
Какое возможное несоответствие данных беспокоит EF, если он создал модель, соответствующую базе данных?
И могу ли я что-то сделать, чтобы убедить его, что все будет хорошо?