Есть ли способ настроить режим fetchmode на более чем один объект, используя linq для nhibernate. Кажется, есть метод расширения, который позволяет мне установить только один объект. Однако мне нужно установить его для более чем одного объекта. Это возможно? Спасибо
Linq для NHibernate и режим загрузки с нетерпением
Ответы (4)
просто используйте его более одного раза.
IList<Entity> GetDataFromDatabase()
{
var query = session.Linq<Entity>();
query.Expand("Property1");
query.Expand("Property2");
return query.ToList();
}
person
Paco
schedule
06.05.2009
или query.Expand (Свойство1, Свойство2);
- person Sprintstar; 20.08.2009
Это метод расширения? Не могу найти его в NHibernate.Linq v2.0.50727.
- person Arnis Lapsa; 06.10.2009
Он есть на сайте NHibernate.Linq.Query ‹T›
- person liammclennan; 15.07.2010
Новый провайдер Linq делает это немного иначе:
var customers = session.Query<Customer>().Fetch(c => c.Orders).ToList();
Подробнее здесь: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html.
person
Mike Hadlow
schedule
06.08.2010
если
Orders
имеет собственный подкласс, будет ли он загружаться с нетерпением? если нет - как бы вы изменили запрос для его загрузки?
- person ilans; 15.12.2016
Чтобы получить внуков:
var customers = session.Query<Customer>() .FetchMany(c => c.Orders) .ThenFetchMany(o => o.OrderLines).ToList();
- person ilans; 15.12.2016
Насколько я понимаю, это не эквивалентно: SetFetchMode гидратирует дерево объектов, а метод Expand извлекает декартово произведение.
person
Jeff
schedule
20.09.2009
Продолжая @Mike Hadlow
ответ, для получения следующего уровня (внуки) вам необходимо сделать:
var customers = session.Query<Customer>()
.FetchMany(c => c.Orders)
.ThenFetchMany(o => o.OrderLines).ToList();
person
ilans
schedule
15.12.2016