Entity Framework - додайте властивість навігації вручну


115

З моєї бази даних я створив модель Entity Framework (4.0). Я не створив базу даних і не маю ніякого контролю над схемою, але є кілька таблиць, у яких не визначено обмежень зовнішніх ключів, але визначено неявне відношення.

Наприклад:

У мене є таблиця під назвою Люди, яка містить такі стовпці: GenderID RaceID

Існують таблиці як для гендерних, так і для перегонів, але немає стороннього ключа в таблиці людей.

Коли я імпортував модель, вона не додала властивості навігації для цих відносин. Я намагався додати його вручну, але від ролі та до ролі вимкнено. Я не впевнений, як додати відносини сам. Як це зробити?

Відповіді:


181

Так - це не так просто.

Ось що ви робите:

1 - Клацніть правою кнопкою миші на конструкторі, Додати -> Асоціація

2 - Налаштування асоціації та кардинальності (Люди * .. 1 стать, люди * .. 1 раса)

3 - Перейдіть у браузер моделей -> Асоціації

4 - Клацніть правою кнопкою миші ваші новостворені асоціації, виберіть пункт Властивості

5 - Тут потрібно встановити кінцеві точки для параметрів ключа та каскаду. Переконайтеся, що ви правильні кінцеві точки. Тут також можна встановити референтне обмеження для своєї неявної навігаційної властивості.

6 - Позначте навігаційну властивість у відповідних таблицях / полях.

7 - Обгрунтуйте свою модель, схрестіть пальці.

Сподіваюся, це допомагає.


20
+1, щоб зберегти те, що залишилося від мого волосся. Я додам, що №6 вимагає зміни стовпця з іноземним ключем на сторінці властивостей асоціації, налаштування Референтне обмеження. Натисніть [...], щоб відкрити діалогове вікно обмеження та змінити манекенне поле, яке дизайнер включив у дочірню таблицю під залежною властивістю.
Джоел Браун

8
Вам також доведеться перейти до властивостей дочірньої таблиці та видалити фіктивне поле, яке додав дизайнер (і яке не відображає жодних реальних полів дочірньої таблиці).
Джоел Браун

2
У випадку перегляду також переконайтеся, що ви отримаєте право визначення основного ключа (клацніть правою кнопкою миші виберіть відповідні поля, позначте їх як EntityKey у властивостях). В іншому випадку ви можете отримати "Множинність не вірна в ролі у відносинах, оскільки залежна роль відноситься до ключових властивостей ..."
Mikl X

1
У №2 ви можете переконатися, що зніміть прапорець "Додати властивості іноземного ключа до об'єкта". Це створює непотрібні головні болі, якщо вам це справді не потрібно.
Шифрування

Після того, як ви знову оновлюєте свою модель з бази даних, лісові об'єкти підтримуватимуть об'єднання, додане вручну?
voodoo_patch

45

Я наткнувся на цю публікацію в блозі, яка пропонує наступне рішення, яке чудово працювало для мене (на жаль, я не міг змусити RPM1984 працювати в моїй ситуації).

  1. Додайте асоціацію за допомогою контекстного меню правою кнопкою миші на фоні дизайнера
  2. Створіть свою асоціацію (не забудьте зняти прапорець зі створення іноземного ключа)
  3. Клацніть правою кнопкою миші на асоціацію та виберіть Властивості
  4. Натисніть ...кнопку для обмеження обмежень
  5. Встановіть співвідношення між клавішами всередині
  6. Підтвердити (з контекстного меню дизайнера)
  7. ???
  8. Прибуток!

4
+1 Пункт 4 змусив мене це зробити правильно, ігнорував це у відповідь RPM194.
Гюго Логманс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.