Erfahren Sie, wie Sie Fremdschlüssel in Entity Framework Core 3 abrufen, ohne unnötige Tabellenjoins zu verwenden, und adressieren Sie dabei Performancefragen bei der effektiven Nutzung von EF Core.
---
Dieses Video basiert auf der Frage https://stackoverflow.com/q/62337684/ gestellt von dem Nutzer 'Erik H' ( https://stackoverflow.com/u/245943/ ) sowie auf der Antwort https://stackoverflow.com/a/62338586/ bereitgestellt von dem Nutzer 'Ivan Stoev' ( https://stackoverflow.com/u/5202563/ ) auf der Website 'Stack Overflow'. Vielen Dank an diese großartigen Nutzer und die Stackexchange-Community für ihre Beiträge.
Besuchen Sie diese Links, um den Originalinhalt und weitere Details zu sehen, z. B. alternative Lösungen, aktuelle Entwicklungen zum Thema, Kommentare, Versionsverlauf usw. Der ursprüngliche Titel der Frage lautete beispielsweise: Entity Framework Core 3, get foreign key without join
Außerdem steht der Inhalt (außer Musik) unter der Lizenz CC BY-SA https://meta.stackexchange.com/help/l...
Der ursprüngliche Fragenbeitrag steht unter der Lizenz 'CC BY-SA 4.0' ( https://creativecommons.org/licenses/... ), und der ursprüngliche Antwortbeitrag steht unter der Lizenz 'CC BY-SA 4.0' ( https://creativecommons.org/licenses/... ).
Falls Ihnen irgendetwas auffällt oder Unstimmigkeiten bestehen, schreiben Sie mir bitte an vlogize [AT] gmail [DOT] com.
---
So holen Sie Fremdschlüssel in Entity Framework Core 3 ohne unnötige Joins ab
Entity Framework (EF) Core ist eine leistungsstarke Object-Relational Mapping (ORM)-Bibliothek für .NET, die die Interaktion mit Datenbanken vereinfacht. Entwickler stehen jedoch manchmal vor Herausforderungen, wenn sie versuchen, die von EF Core generierten Datenbankabfragen zu optimieren. Ein häufiges Problem tritt auf, wenn Fremdschlüssel aus verwandten Tabellen abgerufen werden und unnötige Joins die Performance beeinträchtigen können. In diesem Blogbeitrag zeigen wir, wie man Fremdschlüssel in EF Core 3 abruft, ohne unerwünschte JOIN-Anweisungen zu verursachen.
Das Problem: Unerwünschte Joins in EF Core-Abfragen
Stellen Sie sich vor, Sie haben zwei Tabellen:
Users: Beinhaltet Benutzerdetails mit einer id, name und einem Fremdschlüssel, der auf die Tabelle System verweist.
System: Beinhaltet Systemdetails mit id und name.
Sie möchten die SystemId für einen bestimmten Benutzer direkt aus der Tabelle Users abrufen, ohne einen JOIN auf die Tabelle System auszuführen. Dies ist besonders wichtig, wenn Abfragen komplex und performancekritisch werden.
Die Herausforderung
Sie könnten die folgende Abfrage versuchen, um den Fremdschlüssel abzurufen:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Allerdings zeigt die generierte SQL-Abfrage einen unnötigen LEFT JOIN mit der Tabelle System. Dies kann zu Performanceeinbußen führen, besonders bei größeren Anwendungen, in denen sich solche Joins summieren.
Die Lösung: Workarounds für EF Core 3
Das zugrundeliegende Problem in EF Core 3.x liegt an der Überarbeitung der Abfragepipeline, die derzeit in bestimmten Fällen diese unerwünschten Joins generiert. Glücklicherweise gibt es Workarounds, um dieses Problem zu umgehen.
Verwendung der EF.Property Methode
Eine Möglichkeit, Fremdschlüssel ohne Join abzurufen, ist die Nutzung der EF.Property Methode. Diese Methode erfordert, dass der Name der Schatten-Fremdschluseleigenschaft und deren Typ bekannt sind, was fehleranfällig sein kann.
So implementieren Sie die Lösung:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Dynamisches Abrufen des Fremdschlüsseleigenschaftsnamens
Das harte Codieren des Namens der Fremdschlüsseleigenschaft kann Wartungsprobleme verursachen. Stattdessen können Sie den Namen dynamisch aus den EF Core-Metadaten auslesen:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Anschließend können Sie die Variable verwenden, um die SystemId abzurufen:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Explizite Fremdschlüsseleigenschaften definieren
Um den Code zu vereinfachen und den Umgang mit Schatteneigenschaften zu vermeiden, definieren Sie explizite Fremdschlüsseleigenschaften im Entitätsmodell. Zum Beispiel könnten Sie die Klasse User folgendermaßen anpassen:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Nun können Sie die Eigenschaft SystemId direkt und ohne weitere Umstände abfragen:
[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]
Fazit
Beim Arbeiten mit Entity Framework Core 3 ist ein effizienter Umgang mit Fremdschlüsseln für optimale Performance und sauberen Code entscheidend. Mit der EF.Property Methode und den Metadaten von EF Core können Entwickler Fremdschlüssel ohne unnötige Joins abfragen. Zudem sorgt die Definition expliziter Fremdschlüsseleigenschaften für besser lesbaren und wartbaren Code.
Indem Sie diese Strategien verwenden, stellen Sie sicher, dass Ihre Anwendung effizient läuft – auch wenn sie komplexe und skalierende Abfragen
Информация по комментариям в разработке