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>
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:
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.
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>
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:
virtual
.Microsoft.EntityFrameworkCore.Proxies
NuGet-Paket.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!