¿Cómo lograr que EF6 honre la restricción única (en FK) en la multiplicidad de asociación / relación?

Actualización 2019 / TLDR; cambiar a Entity FrameworkNúcleo (o lo que sea)

Aunque le faltan "Características", EF Core respeta adecuadamente las Teclas alternativas (también conocidas como Restricciones únicas) además de las Teclas primarias y, por lo tanto,mucho mejor trabajo de honrar el álgebra relacional. YMMV de lo contrario; al menos admite muchos más esquemas SQL correctamente.

Este soporte agregado en el (ya desactualizado)Lanzamiento de EF Core 1.0.. un poco decepcionante de que el EF original nunca haya solucionado este defecto de diseño (¡ed!).

Esto puede estar relacionado con miotra pregunta - que parece ser que tampoco:

Entity Framework es unterrible$14Núcleo15$

(que espero) Estoy pasando por alto algo con SSDL / CSDL y el modelo EDMX o las asignaciones de EF en general.

tengo unEsquema primero modelo y el esquema se ve así:

ExternalMaps
---
emap_id - PK

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

Para la verificación, estos están programados como los siguientes, quedebería resultar en una multiplicidad deExternalMaps: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)

Sin embargo, cuando uso el diseñador EDMX para actualizar desde la base de datos (SQL Server 2012), desde cero,incorrectamente crea la relación Asociación / Clave externa comoExternalMap:1 <-> M:Meld.

Cuando intento cambiar la multiplicidad manualmente para el lado Meld (a través de las propiedades "Conjunto de asociación" en el diseñador) a1 o0..1, Yo obtengo:

Transformación en ejecución: la multiplicidad no es válida en el rol 'Meld' en la relación 'FK_Melds_ExternalMaps'. Debido a que las propiedades del rol dependiente no son las propiedades clave, el límite superior de la multiplicidad del rol dependiente debe ser*.

(Al igual que con mi otra pregunta, esto parece estar relacionado con restricciones únicasno estar correctamente registrado / honrado como Candidate Keys.)

¿Cómo puedo hacer que EF honre el1 <-> 0..1/1 multiplicidad, según lo establecido por el modelo?

1 Si bien espero que este no sea el caso, no tengo fin al dolor cuando intento que EF se asigne a un modelo RA perfectamente válido: LINQ to SQL (L2S) síno tiene este problema Como mi otra pregunta no fue respondida trivialmente para un ORM tan popular, estoy perdiendo la fe en esta herramienta.

2 Es por diseño que el FK no es al revés: "Aunque no tendrá claves foráneas anulables". - Tambien esno el caso de que sea una PK "compartida" como estarespuesta desde 2009 sugiere como una solución.

Estoy usando EF 6.1.1, VS 2013 Ultimate, y estoyno va a usar cualquier "característica de subtipo OO", si eso cambia algo.

EDITARsuspiro:

¿La multiplicidad no es válida porque las propiedades del rol dependiente no son las propiedades clave? (desde 2011) - es estotodavía el caso del EF ORM "Microsoft-endorsed Enterprise-ready" en2014 2015?

A este ritmo, la próxima vez que alguien pregunte por qué no se usó EF, tendré una gran cantidad de razones además de "LINQ to SQL funciona bien".

Respuestas a la pregunta(1)

Su respuesta a la pregunta