Связи Entity Framework: ошибка, поскольку свойства зависимой роли не являются ключевыми - PullRequest
2 голосов
/ 09 декабря 2011

Использование Entity Framework 4.1

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

  • Пользователь (идентификатор пользователя PK, имя пользователя, пароль)

  • Врач (уникальный идентификатор PhysicianId, UserId ссылается на PK пользователя, имя врача)

  • PhysicianSite (SiteId, Location, PhysicianId FK to Таблица Physician)

Проблема. Entity Framework не позволит мне связать Physician с PhysicianSite, поскольку PhysicianId не является первичным ключом в таблице Physician.

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

Я получаю следующую ошибку

Ошибка 2 Ошибка 113: множественность недопустима в роли «Врач» в отношении «PhysicianSitePhysician». Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть *.

Может кто-нибудь сказать мне, как я могу создать связь с Physician to PhysicianSite в Entity Framework без PhysicianId, являющегося первичным ключом в таблице Physician?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Entity Framework требует внешних ключей для связи с первичным ключом таблицы.Однако первичный ключ Entity Framework не обязательно должен совпадать с первичным ключом в базе данных.Если вы скажете EF, что PhysicianId является первичным ключом, он не будет проверять, действительно ли это так.И он с радостью примет внешние ключи для PhysicianId.

Если у вас есть некоторые внешние ключи для PhysicianId, а другие - для реального первичного ключа, вам не повезло, но это не похоже на.

0 голосов
/ 04 сентября 2015

Если у вас есть таблица ссылок со столбцом со спецификацией идентификации, удалите ее (это ограничит таблицу ссылок только одной копией идентификатора этой связанной таблицы).

0 голосов
/ 11 февраля 2013

Удалите все таблицы из EDMX и обновите edmx, добавив все таблицы снова. Ef не обновляет все свойства навигации, поэтому выдает такие ошибки

...