Heim > Backend-Entwicklung > C++ > Wie kann ich Busse und ihre wachen Passagiere im Entitätsgerüst effizient abrufen?

Wie kann ich Busse und ihre wachen Passagiere im Entitätsgerüst effizient abrufen?

Linda Hamilton
Freigeben: 2025-02-01 13:36:11
Original
509 Leute haben es durchsucht

effizientes Abnehmen von Bussen und wachen Passagieren im Entitätsgerüst

Dieser Artikel befasst sich mit der Herausforderung des Abrufens von Bussen und ihren wachsenden Passagieren mithilfe von Entity Framework (EF) effizient und minimiert Datenbankaufrufe. Die Lösung variiert geringfügig je nach EF -Version.

How Can I Efficiently Retrieve Buses and Their Awake Passengers in Entity Framework?

EF -Kernversionen vor 5:

ältere EF -Versionen erfordern eine Problemumgehung, um das gewünschte Ergebnis zu erzielen:

  1. Deaktivieren Sie faules Laden: Schalten Sie das faule Laden aus (Context.Configuration.LazyLoadingEnabled = false;), um unnötige Datenbank -Treffer beim Zugriff auf verwandte Entitäten zu verhindern.

  2. Projektionsabfrage: Verwenden Sie eine Projektionsabfrage, um nur die erforderlichen Daten auszuwählen:

<code class="language-csharp">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();</code>
Nach dem Login kopieren
  1. Beziehungsbehebung (automatisch): EFs Beziehungsmotiv findet automatisch die ausgewählte AwakePassengers mit ihren jeweiligen Bussen im Speicher verbunden.

  2. Zuordnung mit Automapper (optional): Verwenden Sie Automapper (oder eine ähnliche Bibliothek), um die abgerufenen Daten Ihren DTOs zuzuordnen.

Wichtige Überlegungen (Pre-EF-Kern 5):

  • Deaktivieren von faulen Ladeauswirkungen auf andere Teile Ihrer Anwendung. Betrachten Sie die Kompromisse.
  • Viele zu viele Beziehungen erfordern möglicherweise eine manuelle Passagierzuweisung nach der Projektion.

ef Core 5 und später:

EF Core 5 und spätere Versionen bieten eine elegantere Lösung mit IncludeWith(...):

<code class="language-csharp">var buses = Context.Busses.Where(b => b.IsDriving)
    .Include(b => b.Passengers.Where(p => p.Awake))
    .ToList();</code>
Nach dem Login kopieren

Diese einzelne Abfrage holt Busse und nur ihre wachsenden Passagiere effizient ab und beseitigt die Notwendigkeit der Problemumgehung in früheren Versionen. Direct Mapping auf DTOs mit Automapper kann dann angewendet werden.

Dieser verbesserte Ansatz in EF Core 5 liefert eine sauberere und effizientere Methode zum Abrufen verwandter Entitäten mit Filterung, wodurch der Prozess erheblich vereinfacht wird.

Das obige ist der detaillierte Inhalt vonWie kann ich Busse und ihre wachen Passagiere im Entitätsgerüst effizient abrufen?. 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