Могу ли я заставить множественность / ассоциации с Entity Framework? - PullRequest
3 голосов
/ 01 августа 2010

У меня есть следующая структура таблицы, которую Entity Framework корректно возвращает как один-ко-многим:

Patient
{
   PatientId PK
}

Death
{
   DeathId PK
   PatientId FK
}

К сожалению, этот дизайн БД неверен, поскольку у вас может быть только один Death на Patient.Вместо этого конструкция должна выглядеть следующим образом:

Death
{
   PatientId PK
}

Однако это производственная система, и БД не может быть изменена.Я пишу новый интерфейс ASP.Net MVC, поэтому я переписываю слой DAL, используя Entity Framework.

Когда я звоню Patient.Death, я получаю набор Death.Я только хочу, чтобы он вернул мне один или ноль Death (так как Patient еще может не быть мертвым).

Итак, я вошел в модель и попытался изменить кратность End2 ассоциации на: 0..1 (Zero or One of Death), но когда я строю проект, я получаю ошибку:

Кратность не действительна в роли «Смерть» в отношении «RefDeath23».Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть *.

Может кто-нибудь сказать мне, как, если возможно, я могу заставить это бытьноль или одна ассоциация?

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

Можете ли вы заставить EF делать то, что вы хотите?Конечно;просто лгите EF о ваших метаданных БД.Вы можете сделать это, сгенерировав вашу БД на основе «правильно» сконструированной БД или отредактировав SSDL вручную.

Однако дважды подумайте, прежде чем сделать это.

EF затрудняет, я подозреваю, по очень веской причине: ваша БД, в худшую или в лучшую сторону, позволяет это.Создавая модель, которая этого не делает, вы настроите себя на ошибку времени выполнения, если вы когда-нибудь столкнетесь с этим условием данных в дикой природе, потому что не было бы способа загрузить его в вашу модель.Вы не сможете работать с таким человеком вообще , пока вы (внешне) не исправите неверные данные в БД.

1 голос
/ 02 августа 2010

Ваша модель EF должна соответствовать вашей базе данных. Поэтому, если база данных неверна, то модель EF также должна быть «неправильной».

Что вы можете сделать, это реализовать это ограничение на бизнес-уровне.

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