Ho una tabella di riferimento automatico standard di Categories
. Nel mio modello di entità ho creato associazioni Children
e Parent
. È possibile caricare l'intero oggetto Category
senza caricare lentamente?Eager carica una tabella autoreferenziale
se utilizzo il codice di seguito, carica solo al secondo livello.
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;
È possibile caricare i riferimenti se sono già stati caricati tutti gli oggetti di categoria?
Un metodo per caricarlo è quello di aggiungere la proprietà Children
più volte
db.Categories.Include("Children.Children.Children.Children.Children")
ma questo genera un codice T-SQL molto lungo folle e anche non fare quello che voglio.
Ma se eseguo la query "SELECT * FROM Categories" ho caricato tutta la tabella e inoltre ho caricato tutte le categorie padre e figlio, perché sono tutte in una tabella. Quindi in questo caso non è molto complicato assegnare questi record caricati alle proprietà referenziate o no? –
Se in realtà è stata ripetuta l'intera tabella, tutti gli oggetti * dovrebbero * essere in memoria e * sarebbe * già stato risolto, con o senza Include. Ma ciò non accadrà finché non avrai raggiunto l'ultimo record sul tavolo. Includi garanzie che gli oggetti correlati saranno lì sul * primo * record che iterate. –
"Quale istruzione SQL include una profondità illimitata in una gerarchia autoreferenziale?" -> Common Table Expressions in T-SQL –