Heim > Backend-Entwicklung > C++ > Wie lädt ich mit einer Where -Klausel im Entity -Framework eifrig verwandte Entitäten?

Wie lädt ich mit einer Where -Klausel im Entity -Framework eifrig verwandte Entitäten?

Susan Sarandon
Freigeben: 2025-02-01 13:46:08
Original
919 Leute haben es durchsucht

How to Eagerly Load Related Entities with a Where Clause in Entity Framework?

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:

  1. 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>
    Nach dem Login kopieren
  2. 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>
    Nach dem Login kopieren
  3. automatische Beziehungsmotiv: EF füllt automatisch die Passengers Eigenschaft jedes Bus -Objekts mit nur den wachen Passagieren.

  4. 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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage