О какой «возможной несогласованности данных» беспокоится структура сущностей в ситуации «внешнего ключа, участвующего во множественных отношениях»? - PullRequest
0 голосов
/ 28 сентября 2011

Предположим, следующая схема базы данных:

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, если он создал модель, соответствующую базе данных?

И могу ли я что-то сделать, чтобы убедить его, что все будет хорошо?

1 Ответ

1 голос
/ 28 сентября 2011

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

Также существует вероятность того, что EF имеет некоторую внутреннюю проблему с отслеживанием состояния независимых ассоциаций, если более чем одна ассоциация основана на одном и том же столбце внешнего ключа, но это всего лишь другое предположение.Обычно функции базы данных, используемые для сопоставления функций EF, не могут быть общими для нескольких конструкций.Единственное исключение, о котором я могу думать сейчас, - это первичные ключи и по-своему столбцы дискриминатора.

Я хотел бы отметить, что мне вообще не нравится этот тип отношений в базе данных.

...