Ich habe eine rekursive Eins-zu-viele-Beziehung, die den Standard-Lazy-Wert von True hat. Welchen Code kann ich gegen die NH-API schreiben, die den ENTIRE-Baum effizient abruft, WENN ich im SubCategories-Mapping lazy = "false" hätte?Eagerly laden rekursive Beziehung
Hier ist die rekursive einer Eins-zu-viele-Beziehung:
<class name="Category" lazy="false">
...
<list name="SubCategories" fetch="subselect">
<key column="ParentCategoryID"/>
<index column="PositionInList"/>
<one-to-many class="Category"/>
</list>
ich nicht angeben faul = „false“ auf der Liste, da Faulheit ist in etwa der Hälfte der Anfragen erforderlich ich ausführen müssen. Ich habe fetch = "subselect" auf der Liste als eine Optimierung für, wenn es mir gelingt, den gesamten Baum abzurufen.
Ich habe die ICriteria API versucht:
session.CreateCriteria<Category>().SetFetchMode("SubCategories", FetchMode.Eager).Add(Restrictions.IsNull("ParentCategory")).SetResultTransformer(CriteriaSpecification.DistinctRootEntity).List<Category>();
aber, dass nur eifrig nur die erste Stufe in der Hierarchie geladen.
Ja, das ist ein nützlicher Artikel und ich habe es bereits gelesen. Als ich vor einigen Monaten das schnelle Laden von Bäumen untersuchte, fand ich den Abschnitt "Eager Load Vorfahren und Nachkommen" relevant. Meine Datenbank ist jedoch SQL Compact und unterstützt keine CTEs (hierarchische Abfragen). Eine einzelne Abfrage zu schreiben, die das Problem löst, ist daher unmöglich. – HappyNomad