11

Это может быть связано с моей other question - который, кажется, что либо:Как получить EF6 в честь уникального ограничения (на FK) в объединении/множественности отношений?

  1. Entity Framework является ужасны Реляционная алгебра картографа или;

  2. (на что я надеюсь) Я пропускаю что-то с SSDL/CSDL и EDMX-моделью или EF-сопоставлениями в целом.

У меня есть схема Первой модели и схема выглядит следующим образом:

ExternalMaps 
--- 
emap_id - PK 

Melds 
--- 
meld_id - PK 
emap_id - >>UNIQUE INDEX<< over not-null column, FK to ExternalMaps.emap_id 

Для проверки, эти сценария как следующий, который должен результата во множестве ExternalMaps:1 <-> 0..1:Melds .

ALTER TABLE [dbo].[Melds] WITH CHECK ADD CONSTRAINT [FK_Melds_ExternalMaps] 
FOREIGN KEY([emap_id]) REFERENCES [dbo].[ExternalMaps] ([emap_id]) 

CREATE UNIQUE NONCLUSTERED INDEX [IX_Melds] ON [dbo].[Melds] ([emap_id] ASC) 

Однако, когда я использую конструктор EDMX для обновления из базы данных (SQL Server 2012), с нуля, это неправильно создает/внешний ключ отношение ассоциации, как ExternalMap:1 <-> M:Meld.

Когда я пытаюсь изменить кратность вручную для Meld (с помощью свойств «Set Association» в дизайнере) сторону либо 1 или 0..1, я получаю:

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

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

Как я могу получить EF в честь 1 <-> 0..1/1 кратность , как установлено моделью?


Хотя я надеюсь, что это не так, я не имею никакого конца мучению при попытке получить EF для отображения на отлично действующей модели RA: LINQ к SQL (L2S) делает не есть эта проблема. Поскольку мой другой вопрос не получил тривиального ответа за такой популярный ORM, я теряю веру в этот инструмент.

По дизайну FK не является другим: «Хотя у него не должно быть нулевых внешних ключей». - Также не случай, что это «общий» ПК, так как этот answer from 2009 предлагает в качестве исправления.

Я использую EF 6.1.1, VS 2013 Ultimate, и am не будет использовать любые функции OO подтипа - если это что-то изменит.


EDIT Вздох:

Multiplicity is not valid because the Dependent Role properties are not the key properties? (с 2011 года) - это еще случай для EF "Microsoft-одобренным Enterprise готовый" ОРМ в 2015?

На этом показателе в следующий раз кто-то спрашивает, почему EF не использовали я большой набор отличных «LINQ к SQL работает просто отлично» причины ..

+0

Когда вы удаляете ограничение уникальности ... он генерирует для вас правильную базу данных/модель? –

+0

@YoupTube Кажется, что создается такая же модель - только на этот раз модель действительно правильная. схема из-за отсутствия UX в базе данных (но затем она нарушает правила данных RI). Я убедился, что редактирую правильную базу данных, изменив имя столбца, которое произошло правильно. – user2864740

+0

И хотя это слабый подход, добавление UX вручную впоследствии ??? –

ответ

13

Проблема заключается в том, что Entity Framework (от EF4 через EF6.1, и кто знает, сколько еще) не «понимают» понятие уникальных ограничений и все, что они подразумевают: EF карты Code First, не реляционная алгебра * вздох *

This answer для моего связанный с этим вопросом, содержит ссылку на a request to add the missing functionality и подводит итог:

.. В настоящее время Entity Framework поддерживает базовые ссылочные ограничения для первичных ключей и не имеет понятия об уникальном ограничении.

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


Я был бы счастлив, если это жесткое ограничение EF обсуждалась открыто и сделано «хорошо известны», особенно, когда EF рекламируется для поддержки схемы первого и/или заменить L2S. С моей точки зрения, EF ориентирован на картографирование (и поддержку) только Code First как первоклассного гражданина. Может быть, еще через 4 года.