Voglio caricare le entità radice e caricare tutti i dati relativi alla raccolta figlio e ai membri aggregati.Eager caricamento raccolta figli con NHibernate
Ho cercato di utilizzare SetFetchMode
in FluentNHibernate, ma sto ottenendo duplicati in una delle raccolte figlio poiché ho una profondità di 3 livelli. DistinctRootEntityResultTransformer
sfortunatamente rimuove solo le duplicazioni di root.
return Session.CreateInvoiceBaseCriteria(query, archived)
.AddOrder(new Order(query.Order, query.OrderType == OrderType.ASC))
.SetFetchMode("States", FetchMode.Eager)
.SetFetchMode("Attestations", FetchMode.Eager)
.SetFetchMode("AttestationRequests", FetchMode.Eager)
.SetFetchMode("AttestationRequests.Reminders", FetchMode.Eager)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.List<Invoice>();
Posso utilizzare più query o qualcosa di simile per archiviare questo?
Inoltre, questo approccio non comporterebbe inutilmente enormi set di risultati dal database?
Qualche suggerimento?
Davvero un buon articolo, ma non so se posso applicarlo alla mia situazione. La soluzione descritta nell'articolo sul caricamento avido di una specifica entità root, il mio problema è che voglio caricare con impazienza una raccolta di entità root. Se dovessi usare MultiCritera ho bisogno di trovare un modo per connettere tutte le diverse query senza specificare un'entità specifica. Suggerimenti su come può essere fatto? – Kristoffer
Questo esempio ha solo un livello di gerarchia aggiuntivo, ma nessun nipote, per il quale MultiQuery/MultiCriteria sembra essere abbastanza inutile, poiché le query successive non possono fare riferimento ai risultati di query precedenti (come Query # 1: selezionare rootObjects r left join recuperare i bambini c dove ...; Query # 2: selezionare i nipoti g dove genitore in c). –