Есть ли способ установить fetchmode для более чем одного объекта, используя linq для nhibernate. Кажется, существует метод расширения, который позволяет мне только установить один объект. Однако мне нужно установить его для нескольких объектов. Это возможно? Благодаря
Linq для режима NHibernate и выборки при загрузке
Ответ 1
просто используйте его более одного раза.
IList<Entity> GetDataFromDatabase()
{
var query = session.Linq<Entity>();
query.Expand("Property1");
query.Expand("Property2");
return query.ToList();
}
Ответ 2
Новый поставщик Linq делает это несколько иначе:
var customers = session.Query<Customer>().Fetch(c => c.Orders).ToList();
Подробнее здесь: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html
Ответ 3
Насколько я вижу, это не эквивалентно: SetFetchMode убирает дерево объектов, а метод Expand извлекает декартовы продукт.
Ответ 4
В ответ на @Mike Hadlow
ответ, выбор следующего уровня (внуков) вам нужно сделать:
var customers = session.Query<Customer>()
.FetchMany(c => c.Orders)
.ThenFetchMany(o => o.OrderLines).ToList();