Como fazer com que o EF6 honre a restrição única (no FK) na multiplicidade de associação / relacionamento?

Atualização 2019 / TLDR; mudar para o Entity FrameworkTestemunho (ou qualquer outra coisa)

Enquanto faltam os "Recursos", o EF Core respeita corretamente as Chaves Alternativas (também conhecidas como Restrições Únicas), além das Chaves Primárias, e, portanto, faz umMuito de melhor trabalho de honrar a álgebra relacional. YMMV caso contrário; pelo menos, ele suporta muito mais esquemas SQL corretamente.

Este suporte foi adicionado no (já desatualizado)Lançamento do EF Core 1.0.. um pouco decepcionante que a EF original nunca teve essa falha de design (ed!) resolvida.

Isso pode estar relacionado ao meuoutra questão - que parece ser isso:

O Entity Framework é umterrivel$14Testemunho15$

(o que eu espero) Estou ignorando algo com SSDL / CSDL e o modelo EDMX ou mapeamentos EF em geral.

eu tenho umEsquema Primeiro modelo e o esquema é assim:

ExternalMaps
---
emap_id - PK

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

Para verificação, eles são roteirizados da seguinte maneira, quedevemos resultar em uma multiplicidade 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)

No entanto, quando uso o designer EDMX para atualizar do banco de dados (SQL Server 2012), do zero, eleincorretamente cria a relação Associação / Chave estrangeira comoExternalMap:1 <-> M:Meld.

Quando tento alterar manualmente a multiplicidade para o lado Meld (por meio das propriedades "Conjunto de associações" no designer) para1 ou0..1, Eu recebo:

Transformação em execução: A multiplicidade não é válida na Função 'Meld' no relacionamento 'FK_Melds_ExternalMaps'. Como as propriedades da Função Dependente não são as principais, o limite superior da multiplicidade da Função Dependente deve ser*.

(Como na minha outra pergunta, isso parece estar relacionado a restrições exclusivasnão sendo corretamente registrado / honrado como Chaves do Candidato.)

Como posso obter a EF para honrar o1 <-> 0..1/1 multiplicidade, conforme estabelecido pelo modelo?

1 Embora eu espero que não seja esse o caso, não estou tendo fim para o luto ao tentar fazer com que EF seja mapeado em um modelo de RA perfeitamente válido: LINQ to SQL (L2S)não tem esse problema. Como minha outra pergunta não foi trivialmente respondida por um ORM tão popular, estou perdendo a fé nesse ferramental.

2 É por design que o FK não é o contrário: "Embora não deva ter chaves estrangeiras anuláveis". - Isso é tambémnão caso seja uma PK "compartilhada", poisresposta de 2009 sugere como uma correção.

Estou usando o EF 6.1.1, VS 2013 Ultimate e estounão vai usar qualquer "recurso de subtipo OO" - se isso mudar alguma coisa.

EDITARsuspiro:

A multiplicidade não é válida porque as propriedades da Função Dependente não são as principais. (a partir de 2011) - é esteainda o caso do ORM "pronto para empresa, endossado pela Microsoft" da EF2014 2015?

Nesse ritmo, da próxima vez que alguém perguntar por que o EF não foi usado, terei um grande conjunto de razões além de "O LINQ to SQL funciona muito bem".

questionAnswers(1)

yourAnswerToTheQuestion