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

2019 Обновление / TLDR; переключиться на Entity Frameworkядро (или что-то еще)

Несмотря на отсутствие «функций», EF Core должным образом учитывает альтернативные ключи (или уникальные ограничения) в дополнение к первичным ключам и, таким образом, выполняетмного лучшая работа по чтению реляционной алгебры. YMMV в противном случае; по крайней мере, он поддерживает многие другие схемы SQL правильно.

Эта поддержка добавлена ​​в (уже устарела)Выпуск EF Core 1.0... немного разочаровывает, что в оригинальном EF этот недостаток дизайна (ред.) никогда не рассматривался.

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

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:Melds2.

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 (через свойства «Набор ассоциаций» в конструкторе), либо1 или же0..1, Я получил:

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

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

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

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

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

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

РЕДАКТИРОВАТЬвздох:

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос