Is there a way to set the fetchmode to eager for more than one object using linq for nhibernate. There seems to be an expand method which only allows me to set one object. However I need to set it for more than one object. Is this possible? Thanks
Linq for NHibernate and fetch mode of eager loading
Asked Answered
just use it more then once.
IList<Entity> GetDataFromDatabase()
{
var query = session.Linq<Entity>();
query.Expand("Property1");
query.Expand("Property2");
return query.ToList();
}
or query.Expand("Property1,Property2"); –
Mooring
Is that an expansion method? Can't find it in NHibernate.Linq v2.0.50727. –
Welldressed
It is there, on NHibernate.Linq.Query<T> –
Linen
The new Linq provider does it a little differently:
var customers = session.Query<Customer>().Fetch(c => c.Orders).ToList();
More here: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html
if
Orders
has a sub class of its own, would it load eagerly? if not - how would you change the query to load it? –
Wedding To get grandchilds:
var customers = session.Query<Customer>() .FetchMany(c => c.Orders) .ThenFetchMany(o => o.OrderLines).ToList();
–
Wedding just use it more then once.
IList<Entity> GetDataFromDatabase()
{
var query = session.Linq<Entity>();
query.Expand("Property1");
query.Expand("Property2");
return query.ToList();
}
or query.Expand("Property1,Property2"); –
Mooring
Is that an expansion method? Can't find it in NHibernate.Linq v2.0.50727. –
Welldressed
It is there, on NHibernate.Linq.Query<T> –
Linen
As far as I can see, this is not equivalent: SetFetchMode hydrates an objects tree and the Expand method retrieves a cartesian product.
In contiune to @Mike Hadlow
answer, fetching next level (grandchildren) you need to do:
var customers = session.Query<Customer>()
.FetchMany(c => c.Orders)
.ThenFetchMany(o => o.OrderLines).ToList();
© 2022 - 2024 — McMap. All rights reserved.