E2L: Как вы обращаетесь с иностранными ключами, которые участвуют в нескольких отношениях? - PullRequest
2 голосов
/ 24 февраля 2009

У меня есть модель базы данных, подобная этой

FlowObject
FlowObjectID (PK)
Описание
Активный

ProcessObject
FlowObjectID (PK, FK)
HasSubmit

DecisionObject
FlowObjectID (PK, FK)
YesFlowObjectID (FK)
NoFlowObjectID (FK)
YesCaption
NoCaption

Когда я пытаюсь использовать создание своей модели Entity, я получаю это предупреждение в своем проекте.

Ограничение внешнего ключа 'FK_ProcessObject_FlowObject1' было опущено в модели хранения. Столбец «FlowObjectID» таблицы «Investigations.Store.ProcessObject» является внешним ключом, участвующим в нескольких отношениях. Модель сущностей один-к-одному не будет проверена, поскольку возможна несогласованность данных.

???

Почему он уронил мой внешний ключ? Потому что «Модель сущностей один-к-одному не будет проверена, поскольку возможна несогласованность данных».

Похоже, это говорит о том, что он отбросил FK из-за несогласованности данных, но удаление FK фактически снижает согласованность дат?

Должен ли я перепроектировать свою базу данных? Есть ли в любом случае L2E для обработки FK, которые участвуют в нескольких отношениях? Считается ли плохим дизайном базы данных иметь FK, которые участвуют в нескольких отношениях?

Ответы [ 2 ]

3 голосов
/ 13 мая 2009

То, что вы описали в переводе на объектно-ориентированные термины, состоит в том, что FlowObject содержит необязательный ProcessObject и необязательный DecisionObject. Если это то, что вы на самом деле имели в виду, схема базы данных верна.

Если вы хотите, чтобы ProcessObject и DecisionObject расширяли FlowObject, возможна несогласованность, поскольку могут существовать строки как ProcessObject, так и DecisionObject. Для устранения несоответствия подходит метод моделирования union-subclass: существуют только таблицы ProcessObject и DecisionObject, каждая из которых содержит все соответствующие поля, а FlowObject как абстрактный базовый класс становится представлением, состоящим из объединения общих базовых полей между две таблицы.

2 голосов
/ 09 февраля 2011

Я только что получил ту же ошибку при попытке рефакторинга это . В EFv1 (.NET 3.5) это не может быть решено . В EFv4 (.NET 4.0) вы можете изменить независимую связь (единственную связь / отношение, доступную в EFv1) на связь с внешним ключом, и она будет работать. Но у ассоциаций FK есть и другие недостатки, так что это не серебряная пуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...