Entity Framework 1 zu 1-Beziehung über die Zuordnungstabelle funktioniert nicht in EDMX

8

Ich habe die folgenden Tabellen in der SQL Server-Datenbank

Was hat eine 1-1 Assoziationstabelle (FooBar), die eindeutige Indizes auf entsprechende FooId, BarId hat, und der Primärschlüssel ist (FooId, BarId).

Um klar zu sein: FooBar erlaubt es keinem FooId (aufgrund einer eindeutigen Einschränkung) mehr als einmal in der Tabelle zu sein, und auch keiner BarId (aufgrund einer eindeutigen Einschränkung) kann mehr als einmal in der Tabelle vorkommen. Dies macht es zu einer 1-1 assoziativen Tabelle.

Ich möchte diese Assoziationstabelle anstelle der 1-1 Beziehung zwischen Foo und Bar haben, weil Bar in meinem Real-World-Szenario andere Beziehungen zu verschiedenen nicht verwandten Tabellen haben wird und ich ähnliche Assoziationstabellen möchte (im Gegensatz zum Hinzufügen neuer FK) Spalten für jede neue Tabelle in Balken)

Was ich dann diese Tabellen in meinen EDMX-Designer bringe. Die Beziehung wird als Viel zu Viel statt Eins zu Eins eingeführt.

Was natürlich nicht das ist, was ich will. Ich kann das Modell manuell in eine 1-1 Beziehung ändern.

Aber dann bekomme ich einen Fehler (im Designer).

Ist das ein Fehler oder ist es nicht möglich, eine 1-1 Assoziation auf diese Weise in EF zu erstellen?

    
Jim 17.02.2015, 16:47
quelle

2 Antworten

6

Es ist ein "Fehler" mit dem gesamten EF-Design: Entity Framework 4-6.1x Nur Auszeichnungen Multiplikation auf Primärschlüsseln .

Auch wenn wir (und die RA-Modelle) wissen, dass es aufgrund einer Candidate Key Constraint eine 1: 1-Beziehung gibt, wird und wird EF nicht mögen es. Hartes Glück.

Zu den "Lösungen" gehören:

  1. Ändern des Modells in etwas, das EF versteht (EF versteht Code First, nicht RA). Zugegeben, dies kann ein "Problem" mit dem ausgewählten RA-Modell anzeigen, aber das ist orthogonal zur Frage ..

  2. Lebe mit den falsch generierten Multiplikationsregeln und "verwende mit Sorgfalt"; Die schmutzige Arbeit kann umgebrochen werden, muss jedoch manuell außerhalb des automatisch generierten Modells hinzugefügt werden.

  3. .. Hmm, andere?

Schamlose Plugs auf ungelöste Fragen haben dasselbe Kernmangelmerkmal:

user2864740 17.02.2015, 17:03
quelle
1

Die Beziehung, die Sie in Ihrer ersten Grafik gezeigt haben, ist in Bezug auf EF keine 1: 1-Beziehung.

Es ist eine Viele-zu-Viele-Beziehung zwischen Foo und Bar

Denken Sie darüber nach:

Mögliche Kombinationen mit den folgenden Werten Foo und Bar

%Vor%

Ihre FooBar-Tabelle ist ein zusammengesetzter Schlüssel, was bedeutet, dass es sich um eine Kombination der Foo- und Bar-Werte handelt, die den Schlüssel bilden - keine 1: 1-Beziehung

Um eine 1: 1-Beziehung zwischen Foo und Bar zu definieren, sollte Ihr Schema eher wie folgt aussehen:

%Vor%

Die FooBar-Tabelle wird nicht für eine 1: 1-Beziehung zwischen foo und bar benötigt.

Wie Sie in Ihren Fragen / Kommentaren angegeben haben - ja, Sie legen eine eindeutige Einschränkung für die einzelnen Teile Ihres zusammengesetzten Schlüssels fest, aber EF berücksichtigt bei der Bestimmung einer Beziehung keine eindeutigen Einschränkungen für Ihr Modell. Wenn Sie eine 1: 1-Beziehung wünschen, sollten Sie ein 1-zu-1-Modell erstellen, anstatt eine 1: 1-Beziehung über eindeutige Einschränkungen zu verspotten.

    
Kritner 17.02.2015 16:53
quelle