Wie kann EF6 dazu gebracht werden, Unique Constraint (auf FK) in der Assoziations- / Beziehungsmultiplizität einzuhalten?

2019 Update / TLDR; Wechseln Sie zu Entity FrameworkAde (oder was auch immer)

Während ein "Feature" fehlt, werden in EF Core zusätzlich zu den Primärschlüsseln auch die alternativen Schlüssel (auch als "Unique Constraints" bezeichnet) korrekt berücksichtigvie Besserer Job, um die relationale Algebra zu ehren. YMMV anders; Zumindest werden wesentlich mehr SQL-Schemata korrekt unterstützt.

Diese Unterstützung wurde im (bereits veralteten) @ hinzugefügEF Core 1.0 Veröffentlichung .. ein bisschen enttäuschend, dass der ursprüngliche EF diesen Design (ed!) Fehler nie behoben hatte.

Dies kann mit meinem @ zusammenhängandere Frag - das scheint auch so zu sein:

Entity Framework ist einschrecklic Relational Algebra Mapper1 oder

(was ich mir erhoffe) Ich übersehen etwas mit SSDL / CSDL und dem EDMX-Modell oder EF-Mappings im Allgemeinen.

Ich habe einSchema First model und das Schema sieht so aus:

ExternalMaps
---
emap_id - PK

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

Zur Überprüfung sind diese wie folgt skriptiersollt ergibt eine Vielzahl vonExternalMaps: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)

Wenn ich jedoch den EDMX-Designer zum Aktualisieren von der Datenbank (SQL Server 2012) verwendfalsc erstellt die Assoziations- / Fremdschlüsselbeziehung alsExternalMap:1 <-> M:Meld.

Wenn ich versuche, die Multiplizität für die Meld-Seite (über die Eigenschaften "Zuordnungssatz" im Designer) manuell auf @ zu ände1 oder0..1, Ich bekomme

Running-Transformation: Die Multiplizität ist in der Rolle "Meld" in der Beziehung "FK_Melds_ExternalMaps" nicht gültig. Da die Eigenschaften der abhängigen Rolle nicht die Schlüsseleigenschaften sind, muss die Obergrenze der Multiplizität der abhängigen Rolle @ sei*.

(Wie bei meiner anderen Frage scheint dies mit Unique Constraints zu tun zu haben.nich korrekt als Kandidatenschlüssel registriert / geehrt sein.)

ie kann ich EF dazu bringen, das @ zu ehre1 <-> 0..1/1 multiplicity, wie vom Modell festgelegt?

1 Obwohl ich hoffe, dass dies nicht der Fall ist, habe ich kein Ende der Trauer, wenn ich versuche, EF dazu zu bringen, auf ein perfekt gültiges RA-Modell abzubilden: LINQ to SQL (L2S) funktioniertnich habe dieses Problem. Da meine andere Frage für ein so populäres ORM nicht trivial beantwortet wurde, verliere ich das Vertrauen in dieses Werkzeug.

2 Es ist beabsichtigt, dass der FK nicht umgekehrt ist: "Obwohl er keine nullbaren Fremdschlüssel haben soll." - Es ist auchnich der Fall, dass es sich um eine "geteilte" PK handelt, wie dieseanswer von 2009 schlägt als Lösung vor.

Ich verwende EF 6.1.1, VS 2013 Ultimate und binnich werde alle "OO-Subtyp-Features" verwenden - wenn sich etwas ändert.

EDITSeufze:

Multiplicity ist ungültig, da die Eigenschaften der abhängigen Rolle nicht die Schlüsseleigenschaften sind? (ab 2011) - ist dasimmer noc der Fall für die EF "Microsoft-Endorsed Enterprise-Ready" ORM in 2014 2015?

Bei dieser Rate, wenn das nächste Mal jemand fragt, warum EF nicht verwendet wird, gibt es eine Reihe anderer Gründe als "LINQ to SQL funktioniert einwandfrei".

Antworten auf die Frage(2)

Ihre Antwort auf die Frage