Проблема интерпретации внешних ключей - PullRequest
2 голосов
/ 19 мая 2011

Я генерирую Entity Data Model в Visual studio из базы данных.

Однако я заметил, что она не генерирует ни отношений, ни свойств навигации из некоторых внешних ключей.Это происходит, когда ограничения внешнего ключа определены с отключенной опцией Enforce Foreign Key Constraint, как в следующем экспонате (из SSMS).

Есть ли способ справиться с этим?К сожалению, я не могу изменить схему базы данных.

enter image description here

Ответы [ 2 ]

1 голос
/ 20 мая 2011

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

Если вы просто добавляете ассоциацию из панели инструментов, она по умолчанию создает независимую ассоциацию. Независимая ассоциация должна быть сопоставлена ​​с аналогом базы данных. Это означает, что вы должны вручную открыть EDMX и обмануть EF, изменив SSDL (вы добавите отношение к части SSDL вручную, что может быть довольно сложной задачей - следуйте справке SSDL: AssociationSet и Association elements ). Теперь вы можете отобразить отношение в окне «Сведения о сопоставлении» конструктора (вам также придется изменить сущности, поскольку свойство FK не должно быть сопоставлено с сущностью при использовании независимой ассоциации, а в случае ассоциации «многие ко многим» вы будете должны удалить сущность для соединительной таблицы). EF будет считать, что это отношение существует в базе данных. Как только вы измените SSDL вручную, вы больше не сможете использовать Обновление из базы данных . Это удалит все ваши ручные изменения.

Если вы используете EFv4, вы можете использовать сопоставление внешнего ключа (полные различия между этими двумя типами описаны здесь ). Связь внешнего ключа не отображается, но ее нельзя использовать для определения отношения «многие ко многим».

Проблема возникнет, если данные в базе данных не обеспечивают связь (что может произойти, потому что FK отключены). В таком случае ваше приложение не будет работать, и не будет никакого способа обойти это, кроме восстановления целостности данных в базе данных или удаления ассоциации из модели.

Лучшее решение для вас - включить FK в базе данных!

0 голосов
/ 19 мая 2011

К сожалению, вы должны добавить их вручную в модель.В этом сила OR OR Mapping.Модель может выглядеть иначе (лучше), чем база данных.

...