EF - MitOptional - Left Outer Join?

8

Mit den folgenden Eins-zu-Eins-Modellen, beide mit Navigationseigenschaften: -

%Vor%

Foo hat einen optionalen Balken .

Leiste hat einen erforderlichen Foo .

Ich habe die folgende Zuordnung auf Balken : -

%Vor%

Erzeugt den Fremdschlüssel in der Tabelle Bar mit dem Namen "FooId".

All dies funktioniert gut, außer dass es sql for Foo mit einem 'Left Outer Join' zu Bar bei allen Abfragen erzeugt, wenn es nicht benötigt wird.

%Vor%

Bei genauerer Betrachtung wird nur die ID des Balkens zurückgegeben.

Suchen Stapel Ich kann die meisten Vorschläge sehen, um .WithMany anstelle von% zu verwenden co_de%, aber ich brauche die Navigationseigenschaften.

Irgendwelche Vorschläge?

    
BenG 05.04.2017, 12:16
quelle

1 Antwort

4

Dies ist das Standardverhalten für eine 1: 1-FK-Zuordnung und kann nicht vermieden werden. Was EF tut, ist, intern eine verborgene Eigenschaft (Schatten) wie int? BarId für die Entität Foo zu pflegen.

Die einzige Möglichkeit, LEFT OUTER JOIN s loszuwerden und bidirektionale Navigationseigenschaften beizubehalten, ist, wenn Sie sich das Shared Primary Key Association durch Entfernen des Bar Calls aus der fließenden Konfiguration:

%Vor%

In diesem Modell enthält die Tabelle Map nicht die Spalte Bar FK, sondern die PK-Spalte FooId ist nicht mehr Identität und dient auch als FK-Referenzierung Id table.

Dies erlaubt es EF nicht, ein Foo in BarId zu pflegen, da es weiß, dass wenn Foo entspricht, es mit Bar gleich Id wäre.

Wenn Sie das Datenbankdesign nicht ändern können, haben Sie kein Glück mehr - Sie müssen entweder mit Foo.Id s leben oder die Navigationseigenschaft LEFT OUTER JOIN opfern und die Beziehung als unidirektionales Eins-zu-Viele konfigurieren wie du schon erwähnt hast.

    
Ivan Stoev 07.04.2017, 15:05
quelle