Frage

Ich habe eine Standard -Selbstreferenzentabelle von Categories. In meinem Entitätsmodell habe ich Assoziationen hergestellt Children und Parent. Ist es möglich, das Ganze zu laden? Category Objekt ohne faules Laden?

Wenn ich den folgenden Code verwende, wird er nur auf 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;

Ist es möglich, Referenzen zu laden, wenn ich alle bereits geladenen Kategorieobjekte habe?

Eine Methode zum Laden besteht darin, das hinzuzufügen Children Eigenschaft mehrmals

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

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

War es hilfreich?

Lösung

Nein, es ist nicht möglich. Bedenken Sie: Alle LINQ -zu -Entitäten -Abfragen werden in SQL übersetzt. Welche SQL-Aussage enthält eine unbegrenzte Tiefe in einer Selbstreferenzhierarchie? In Standard SQL gibt es keinen. Wenn es in T-SQL eine Erweiterung dafür gibt, weiß ich nicht, was es ist, und ich glaube auch nicht, dass EF-Anbieter dies tun.

Andere Tipps

Ok, Sie können in Betracht ziehen, die Lastmethode zu verwenden.

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

Natürlich muss die Kategorie Entität von ObjectContext verfolgt werden.

Hier gibt es eine bessere Erklärung How-Does-Entramework-Work-With-recursive-hierarchien-include-Seems-Not-to.

Eine Möglichkeit, wie ich es gewohnt habe, das zu implementieren, wenn ich mehrere Einheiten habe, die ich alle Kinder in Selbstreferenztabelle bekommen möchte, ist zu verwenden rekursiver CTE und gespeicherte Prozedur Um ihre IDs mithilfe von Entity Framework zu erhalten:Hier ist der Code, der Entity Framework und Code erster Ansatz verwendet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top