Optimierung von EF -Abfragen: Filterung verwandte Entitäten mit include
Dieser Artikel befasst sich mit der Herausforderung, verwandte Entitäten mit einer Where
-Klausel innerhalb einer Entitätsgerüstabfrage (EF) effizient abzurufen. Das Ziel ist es, mehrere Datenbankfahrten zu vermeiden.
Das Szenario umfasst zwei Einheiten: Bus
und Person
, wobei Bus
eine Sammelnavigationseigenschaft für Person
verfügt. Das Ziel ist es, alle Busse abzurufen, zusammen mit nur jenen Passagieren, die wach sind.
Ein gemeinsamer ineffizienter Ansatz führt zu mehreren Datenbankaufrufen. Eine effizientere Lösung besteht
Where
Hier ist ein Beispiel, das diesen Ansatz demonstriert:
Dieser Code holt zuerst Fahrbusse und ihre wachsenden Passagiere in einer einzelnen Datenbankabfrage ab. Der
Context.Configuration.LazyLoadingEnabled = false; var buses = Context.Busses.Where(b => b.IsDriving) .Select(b => new { Bus = b, AwakePassengers = b.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.Bus) .ToList();
Objekte ausgewählt und zurückgegeben. AsEnumerable()
Bus
Diese Methode kann zwar in EF6 wirksam sind, erfordert möglicherweise Anpassungen für viele zu viele Beziehungen und in EF-Kern. EF Core bietet Funktionen wie globale Abfragefilter, die alternative Lösungen für komplexere Szenarien bieten können. Ausführliche Informationen zu diesen fortschrittlichen Techniken und zur Bearbeitung vieler Beziehungen finden Sie in der ursprünglichen Quelle.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient verwandte Einheiten mit einer Where -Klausel in einer EF -Abfrage einbeziehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!