Entity Framework Возможно ли добавить ASSOCIATION между первичными ключами и внешним ключом - PullRequest
6 голосов
/ 15 сентября 2010

У меня в EDMX есть следующие объекты: - alt text

Эти два объекта были созданы Обновление модели из базы данных .

Теперь обратите вниманиекак моя страна имеет следующий первичный ключ: -

Имя & IsoCode

это происходит потому, что каждая страна уникальна в системе по Имени иIsoCode.

Теперь с моими штатами ... это похоже.Первичный ключ: -

Имя & CountryId

Каждый штат уникален по имени и по стране.

Теперь,Внешний ключ для штатов - CountryId.Это sql: -

ALTER TABLE [dbo].[States]  WITH CHECK ADD 
        CONSTRAINT [FK_States_Countries] FOREIGN KEY([CountryId])
REFERENCES [dbo].[Countries] ([CountryId])
ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries]
GO

Довольно простые вещи.

НО EntityFramework не нравится :( Предполагается, что мне нужно соединить некоторые свойства из сущности State с обоимисвойства первичного ключа в сущности Country.

Возможно ли добавить АССОЦИАЦИЮ между Страной и Штатом в Country.CountryId <-> State.CountryId ... как я отобразил в своей БД?

Ура;)

Ответы [ 2 ]

10 голосов
/ 15 сентября 2010

В EF (3.5 и 4.0) FK ДОЛЖНЫ указывать на первичные ключи.

Но вы, похоже, пытаетесь указать на ключ-кандидат (т. Е. [Страны]. [CountryId]

Я знаю, что это то, что команда EF рассматривает для следующей версии:)

Надеюсь, это поможет

Алекс

0 голосов
/ 23 октября 2012

Для правильной нормализации БД, во-первых, первичные ключи должны быть только CountryId и StateId поля - поля основного идентификатора для каждой таблицы.

И ssЯ вижу из описания Name & IsoCode и Name & CountryId должно быть на самом деле Уникальные ключи , а не первичные.

Тогда класс модели State должно иметь поле:

public Country Country { get; set; }

Теперь у EF есть очень хорошие примеры, и начиная с 4.3.1 + он полностью поддерживает модели Code first / DB first, что, я думаю, облегчит решение этой проблемы.EF 5 имеет больше обновлений совместимости, поэтому я думаю, что это не будет проблемой для устаревших механизмов БД.

...