effizientes Laden verwandter Daten mit Filterung im Entitäts -Framework
Dieser Artikel befasst sich mit der Herausforderung, verwandte Entitäten eifrig zu laden, während die Filterbedingungen innerhalb des Entity -Frameworks angewendet werden. Der optimale Ansatz hängt von Ihrer EF -Version ab.
Entity Framework 6 Lösung
EF6 stützt sich auf eifrige Lade- und Beziehungsfindung. Dieser Fixup-Mechanismus funktioniert jedoch nicht immer korrekt mit vielen zu vielen Beziehungen. Eine Problemumgehung beinhaltet:
Deaktivieren des faulen Ladens: Verhindern Sie das faule Laden, um sicherzustellen, dass alle Daten in einer einzelnen Abfrage abgerufen werden:
<code class="language-csharp">Context.Configuration.LazyLoadingEnabled = false;</code>
Projektion mit Filterung: Verwenden Sie eine Projektion, um zu verwandte Entitäten während der Abfrage zu filtern:
<code class="language-csharp">var buses = Context.Busses .Where(b => b.IsDriving) .Select(x => new { b, Passengers = x.Passengers.Where(p => p.Awake) }) .AsEnumerable() .Select(x => x.b) .ToList();</code>
automatische Beziehungsmotiv: EF füllt automatisch die Passengers
Eigenschaft jedes Bus
-Objekts mit nur den wachen Passagieren.
Datenübertragungsobjekte (DTOs): Verwenden Sie ein Mapping -Tool wie Automapper, um die abgerufenen Daten in DTOs für eine optimale Datenübertragung umzuwandeln.
Entity Framework Core (5.0 und später) Lösung
EF Core 5.0 und spätere Versionen, die direkt verschachtelt werden, beinhaltet mit den Klauseln, die den Prozess vereinfachen:
<code class="language-csharp">var buses = Context.Busses .Include(bus => bus.Passengers.Where(p => p.Awake)) .ToList();</code>
Alternativer Ansatz: Bibliotheken von Drittanbietern
Bibliotheken wie EntityFramework.DynamicFilters
bieten eine optimiertere Methode zur Verwaltung globaler Filter, die für eingeschlossene Sammlungen anwendbar sind. Dies kann die Code -Lesbarkeit und die Wartbarkeit für komplexe Szenarien verbessern.
Zusammenfassung
Der beste Ansatz, um verwandte Daten mit Filterung in Entity -Framework zu laden, hängt von der verwendeten Version ab. EF Core 5.0 bietet eine einfache Lösung. Für EF6 ist eine Problemumgehung erforderlich, bei der fauler Laden und Prognosen verwendet werden. Bibliotheken von Drittanbietern bieten eine Alternative für eine verbesserte Codeorganisation und Flexibilität.
Das obige ist der detaillierte Inhalt vonWie lädt ich mit einer Where -Klausel im Entity -Framework eifrig verwandte Entitäten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!