2009-05-06 7 views
44

¿Hay alguna manera de establecer el modo fetchmode para más de un objeto utilizando linq for nhibernate. Parece que hay un método expand que solo me permite establecer un objeto. Sin embargo, necesito configurarlo para más de un objeto. es posible? GraciasLinq para NHibernate y modo de búsqueda de carga ansiosa

Respuesta

18

solo úselo más de una vez.

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

o query.Expand ("Propiedad1, Propiedad2"); – Sprintstar

+2

¿Es eso un método de expansión? No lo puede encontrar en NHibernate.Linq v2.0.50727. –

+0

Es decir, la versión 1.0.0.0 –

8

Por lo que yo puedo ver, esto no es equivalente: SetFetchMode hidrata un árbol de objetos y el Expandir método recupera un producto cartesiano.

102

El nuevo proveedor LINQ lo hace un poco diferente:

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

Más aquí: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html

+0

si 'Orders' tiene una subclase propia, ¿se cargaría con entusiasmo? si no, ¿cómo cambiarías la consulta para cargarla? – ilans

+1

Para obtener nietos: 'var clientes = session.Query () .FetchMany (c => c.Orders) . ThenFetchMany (o => o.OrderLines) .ToList();' – ilans

0

En contiune a @Mike Hadlow respuesta, ir a buscar el nivel siguiente (nietos) que tiene que hacer:

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

Cuestiones relacionadas