Ich habe dieses einfache Modell in einem neuen, neuen Projekt:
%Vor%Die Zuordnungen sind:
%Vor%Ich führe diese Abfrage aus:
%Vor% Wobei db.As
das DbSet von A ist.
Erzeugt das folgende sql
%Vor%das scheint mir kompliziert. Es "verbindet" sich sogar mit C, das ich nicht von A oder B referenziere und das nicht in der Abfrage enthalten ist.
Nun, die Sache ist: Wir haben ein großes Projekt mit einigen sehr komplexen Modellen, wir haben einige Performance-Probleme, als wir die Abfragen profilierten, fanden wir, dass es Abfragen gab, die viele Entitäten und sie "einschließen" mussten generierte SQL von mehr als 3k Zeilen.
Stimmt etwas in unseren Abbildungen oder unserer Konfiguration nicht? Wir haben Lazy Loading und Proxy-Erstellung deaktiviert.
Ich habe keine wirkliche Antwort für Sie, aber mit den gleichen Spezifikationen hätte ich geschrieben:
%Vor%, das das gleiche Datenbankschema wie Ihres enthält.
Warum hätte ich das tun sollen? Weil ich oft denke, was ich für ein Schema habe? Und mit meiner Praxis ist der Code für dieses Schema der obige.
BTW: resultierende Abfrage für ctx.Set<A>().Include(x => x.B).Where(x => x.B.Text == "10").Select(x => x)
ist:
aber immer noch hier: warum extend3?
Weil Extend2 erlaubt, das A ohne B zu filtern: das ist inner join ... extend2
ist ein Wo (wirklich klar, nein?)
Tags und Links sql-server entity-framework linq