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.
EF -Kernversionen vor 5:
ältere EF -Versionen erfordern eine Problemumgehung, um das gewünschte Ergebnis zu erzielen:
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.
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>
Beziehungsbehebung (automatisch): EFs Beziehungsmotiv findet automatisch die ausgewählte AwakePassengers
mit ihren jeweiligen Bussen im Speicher verbunden.
Zuordnung mit Automapper (optional): Verwenden Sie Automapper (oder eine ähnliche Bibliothek), um die abgerufenen Daten Ihren DTOs zuzuordnen.
Wichtige Überlegungen (Pre-EF-Kern 5):
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>
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!