6

У меня есть следующие объекты на моем EDMX: -. alt textвозникли серьезные проблемы с Entity Framework и внешних ключей :(

Эти два entites были сгенерированы Model Update Из базы данных

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

Имя & IsoCode

Это потому, что каждая страна UNIQUE в системе по имени и IsoCode.

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

Имя & CountryId

Каждое государство является уникальным по имени и в каждой стране.

Теперь иностранный ключ для государств является CountryId. Это код: -

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 ... как я отобразил в моей БД

Приветствие;)

+0

@Alex James: Вы можете помочь, добрый сэр? –

+0

Yeap ... см. Ответ ниже! –

ответ

10

в EF (3.5 и 4.0) FKs должны указывать на первичные ключи?.

Но вы, кажется, пытается указать на потенциальный ключ (т.е. [страны]. [CountryId]

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

Надеется, что это помогает

Alex

+0

Спасибо, Алекс за то, что подобрал мой вопрос. Я искренне ценю это :) Похоже, я вернусь к тому, чтобы сделать идентификаторы ПК и добавить уникальные ограничения. Doh :) всегда на шаг впереди текущих сборников EF ... :) Еще раз спасибо, друг, очень люблю вашу помощь :) продолжайте! –

+4

Я просмотрел документы с изменениями CTP5 и не видел ничего, что связано с этим. Является ли эта функция еще рассмотренной или в процессе разработки или ...? Это настоящий камень преткновения для отображения устаревших баз данных. –

0

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

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

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

public Country Country { get; set; } 

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

+0

Если я так или иначе не понял ваш ответ - это совершенно не касается вопроса. «Возможно ли добавить АССОЦИАЦИЯ между страной и государством по стране. CountryId <-> State.CountryId» - это вопрос - как в «Могу ли я добавить ассоциацию на нечто иное, чем первичный ключ (в этом случае ключ-кандидат) " – tim

Смежные вопросы