Ho una relazione ricorsiva uno-a-molti che ha il valore lazy predefinito di true. Quale codice posso scrivere contro l'API di NH che recupererà in modo efficiente l'INTERO albero AS SE ho avuto lazy = "false" nel mapping di sottocategorie?Carattere ricorsivo con carico immediato
Ecco il ricorsiva uno-a-molti:
<class name="Category" lazy="false">
...
<list name="SubCategories" fetch="subselect">
<key column="ParentCategoryID"/>
<index column="PositionInList"/>
<one-to-many class="Category"/>
</list>
Non specificare pigro = "false" sulla lista poiché la pigrizia è richiesto in circa la metà delle domande che ho bisogno di correre. Ho fetch = "subselect" sulla lista come ottimizzazione per quando riesco a recuperare l'intero albero.
Ho provato l'API ICriteria:
session.CreateCriteria<Category>().SetFetchMode("SubCategories", FetchMode.Eager).Add(Restrictions.IsNull("ParentCategory")).SetResultTransformer(CriteriaSpecification.DistinctRootEntity).List<Category>();
ma che solo con entusiasmo caricato solo il primo livello della gerarchia.
Sì, questo è un articolo utile e l'ho già letto. Quando stavo indagando su un carico veloce di alberi diversi mesi fa, ho trovato rilevante la sezione "Anziani di carico e discendenti". Il mio database è SQL Compact, tuttavia, e non supporta CTE (query gerarchiche). Quindi scrivere una singola query che risolva il problema sembra impossibile. – HappyNomad