Подтвердить что ты не робот

Как заставить EF6 соблюдать уникальное ограничение (на FK) в множественности ассоциации/отношения?

Это может быть связано с моим другим вопросом - похоже, что:

  • Entity Framework - ужасный коррелятор реляционной алгебры 1 или;

  • (на что я надеюсь) Я пропускаю что-то с 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 2.

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), с нуля, он неправильно создает отношение Association/Foreign Key как ExternalMap:1 <-> M:Meld.

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

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

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

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


1 Хотя я надеюсь, что это не так, я не хочу печалиться, пытаясь заставить EF отобразить на вполне допустимую модель RA: LINQ to SQL (L2S) не имеет Эта проблема. Поскольку мой другой вопрос не был тривиально дан для такого популярного ОРМ, я теряю веру в этот инструмент.

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

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


ИЗМЕНИТЬ вздох:

Множественность недействительна, поскольку свойства зависимой роли не являются ключевыми свойствами? (с 2011 г.) - это все еще имеет место для EF "Microsoft-одобренный Enterprise-ready" ORM в 2014 2015?

При такой скорости в следующий раз, когда кто-то спросит, почему EF не был использован, у меня будет большой набор причин, кроме "LINQ to SQL работает просто отлично".

4b9b3361

Ответ 1

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

Этот ответ по моему связанному вопросу предоставляет ссылку на запрос на добавление недостающей функциональности и суммирует его:

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

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


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