Zuordnung der selbstreferenzierenden Kategorietabellenstruktur zu EF Core
Das Problem ergibt sich aus der Komplexität des Abrufens einer hierarchischen Struktur wie der Kategorie Tabelle mit ihrer ParentId-Spalte, innerhalb der Einschränkungen von EF Core und LINQ. Um dieses Problem zu beheben, wurde eine rekursive Funktion eingesetzt, um die Kategorien manuell zu durchlaufen und die ChildCategories-Eigenschaft zu füllen.
Es ist jedoch eine effizientere Lösung entstanden, die alle Funktionen von EF Core nutzt:
Using ein einzelnes Include
Im Gegensatz zu früheren Versuchen, einen Teil des Baums mit Include() zu laden, umfasst dieser Ansatz ein einzelnes Include() für die ChildCategories-Eigenschaft. In Kombination mit der Materialisierung der Abfrage in einen LINQ to Objects-Kontext ermöglicht dies, dass die Navigationseigenschaftskorrektur von EF Core die Zuordnung verarbeiten kann.
Optimierter Abruf mit Filterung
Zu Um nur die Stammknoten des Kategoriebaums abzurufen, wie von der GetAll()-Methode des Repositorys gefordert, wird nach der Abfrage ein Filter angewendet materialisiert:
return Table .AsEnumerable() .Where(x => x.ParentId == null) .ToList();
Durch die Materialisierung der Abfrage in einen LINQ to Objects-Kontext mithilfe von AsEnumerable() werden die Navigationseigenschaften festgelegt, bevor die Filterung angewendet wird. Dies führt zu einer einzigen SQL-Abfrage, die effektiv die gewünschte hierarchische Struktur abruft, ohne dass rekursive Funktionen erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie kann EF Core eine selbstreferenzierende Kategorietabelle für den hierarchischen Datenabruf effizient zuordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!