2009-05-06 12 views
44

C'è un modo per impostare il fetchmode su desiderosi di più di un oggetto utilizzando linq per nibernato. Sembra esserci un metodo di espansione che mi consente solo di impostare un oggetto. Tuttavia ho bisogno di impostarlo per più di un oggetto. È possibile? GrazieLinq per NHibernate e modalità fetch di caricamento ansioso

risposta

18

basta usarlo più di una volta.

IList<Entity> GetDataFromDatabase() 
{ 
    var query = session.Linq<Entity>(); 
    query.Expand("Property1"); 
    query.Expand("Property2"); 
    return query.ToList(); 
} 
+6

o query.Expand ("Proprietà1, Proprietà2"); – Sprintstar

+2

È un metodo di espansione? Non riesco a trovarlo in NHibernate.Linq v2.0.50727. –

+0

Voglio dire, versione 1.0.0.0 –

8

Per quanto posso vedere, questo non è equivalente: setFetchMode idrata un albero di oggetti e il metodo Expand recupera un prodotto cartesiano.

102

Il nuovo provider LINQ fa un po 'diverso:

var customers = session.Query<Customer>().Fetch(c => c.Orders).ToList(); 

Maggiori informazioni qui: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html

+0

se 'Ordini' ha una sottoclasse a parte, se caricasse avidamente? se no, come cambieresti la query per caricarla? – ilans

+1

Per ottenere nipoti: 'var customers = session.Query () .FetchMany (c => c.Orders) .ThenFetchMany (o => o.OrderLines) .ToList();' – ilans

0

In contiune a @Mike Hadlow risposta, il recupero livello successivo (nipoti) che devi fare:

var customers = session.Query<Customer>() .FetchMany(c => c.Orders) .ThenFetchMany(o => o.OrderLines).ToList();