Eifrig laden Sie eine selbstreferenzierende Tabelle

c# entity-framework hierarchical-data

Frage

Ich habe eine standardmäßige selbstreferenzierende Tabelle mit Categories . In meinem Entitätsmodell habe ich Assoziationen zu Children und Parent . Ist es möglich, das gesamte Category Objekt ohne verzögertes Laden zu laden?

Wenn ich den folgenden Code verwende, wird er nur in die zweite Ebene geladen.

db.Categories.MergeOption = System.Data.Objects.MergeOption.NoTracking;

var query = from c in db.Categories.Include("Children")
            where c.IsVisible == true
            orderby c.SortOrder, c.Id
            select c;

Kann ich Referenzen laden, wenn ich alle Kategorieobjekte bereits geladen habe?

Eine Methode zum Laden ist das mehrmalige Hinzufügen der Children Eigenschaft

db.Categories.Include("Children.Children.Children.Children.Children")

Dies erzeugt jedoch einen sehr langen wahnsinnigen T-SQL-Code und macht auch nicht das, was ich will.

Akzeptierte Antwort

Nein, das ist nicht möglich. Beachten Sie: Alle LINQ to Entities-Abfragen werden in SQL übersetzt. Welche SQL-Anweisung enthält eine unbegrenzte Tiefe in einer selbstreferenzierenden Hierarchie? In Standard-SQL gibt es keine. Wenn es eine Erweiterung in T-SQL gibt, weiß ich nicht, was es ist, und ich glaube auch nicht, dass EF-Anbieter dies tun.


Beliebte Antwort

Ok, Sie können die Load-Methode in Betracht ziehen.

 if (!category.Children.IsLoaded)
        category.Children.Load();

Natürlich muss das Category-Entity durch ObjectContext verfolgt werden.

Hier gibt es eine bessere Erklärung, wie das Entity-Framework mit rekursiven Hierarchien funktioniert .



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum