Heim > Backend-Entwicklung > C++ > EF CORE: Wie gehe ich mit Null -Beziehungen um, wenn ich auf verwandte Einheiten zugreift?

EF CORE: Wie gehe ich mit Null -Beziehungen um, wenn ich auf verwandte Einheiten zugreift?

Barbara Streisand
Freigeben: 2025-01-24 22:26:10
Original
598 Leute haben es durchsucht

EF Core: How to Handle Null Relations When Accessing Related Entities?

EF Core: Vermeidung von Nullreferenzausnahmen mit verwandten Entitäten

Der direkte Zugriff auf verwandte Entitäten in Entity Framework Core (EF Core)-Abfragen kann NullReferenceException zu Fehlern führen, wenn die Beziehung nicht ordnungsgemäß geladen wird. Dies passiert häufig, wenn Sie versuchen, auf Navigationseigenschaften zuzugreifen, bevor EF Core die zugehörigen Daten abgerufen hat.

Wenn beispielsweise eine Mutant-Entität über eine OriginalCode-Navigationseigenschaft verfügt, wird beim Zugriff auf mutant.OriginalCode möglicherweise null zurückgegeben, es sei denn, Sie haben die zugehörige OriginalCode-Entität explizit geladen. EF Core führt standardmäßig kein verzögertes Laden durch.

Die Lösung: Eager Loading

Der einfachste Ansatz ist Eager Loading. Dadurch werden verwandte Daten während der ersten Abfrage vorab geladen, wodurch Nullwerte verhindert werden. In unserem Beispiel:

<code class="language-csharp">var mutants = db.Mutants.Include(m => m.OriginalCode).ToList();</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass m.OriginalCode für jedes Mutant in der mutants-Liste ausgefüllt wird.

Kontrolle des Datenladens

Manchmal möchten Sie vielleicht vermeiden, verwandte Entitäten automatisch zu laden, insbesondere wenn es um große Datenmengen oder Leistungsprobleme geht. Es stehen zwei Optionen zur Verfügung:

  1. Separater DbContext: Verwenden Sie eine separate DbContext-Instanz ausschließlich für die Abfrage, um mögliche Nebenwirkungen durch andere Teile Ihrer Anwendung zu vermeiden.

  2. Keine Tracking-Abfragen: Verwenden Sie AsNoTracking(), um zu verhindern, dass EF Core die Entitäten verfolgt, und verbessern Sie so die Leistung:

<code class="language-csharp">var mutants = db.Mutants.AsNoTracking().ToList();</code>
Nach dem Login kopieren

Lazy Loading (EF Core 2.1 und höher)

EF Core 2.1 und spätere Versionen unterstützen Lazy Loading. Um es zu aktivieren:

  • Virtuelle Eigenschaften:Deklarieren Sie alle Navigationseigenschaften als virtual.
  • Proxies-Paket: Installieren Sie das Microsoft.EntityFrameworkCore.ProxiesNuGet-Paket.
  • Proxys aktivieren: Rufen Sie UseLazyLoadingProxies() auf, wenn Sie Ihr DbContext konfigurieren.

EF Core bietet auch einen Proxy-losen Lazy-Loading-Ansatz; Weitere Informationen finden Sie in der offiziellen Dokumentation. Denken Sie daran, dass Lazy Loading die Leistung beeinträchtigen kann. Gehen Sie daher mit Bedacht damit um.

Das obige ist der detaillierte Inhalt vonEF CORE: Wie gehe ich mit Null -Beziehungen um, wenn ich auf verwandte Einheiten zugreift?. 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