Linq для NHibernate и режим загрузки с нетерпением

Есть ли способ настроить режим fetchmode на более чем один объект, используя linq для nhibernate. Кажется, есть метод расширения, который позволяет мне установить только один объект. Однако мне нужно установить его для более чем одного объекта. Это возможно? Спасибо


person NabilS    schedule 06.05.2009    source источник


Ответы (4)


просто используйте его более одного раза.

IList<Entity> GetDataFromDatabase()
{
    var query = session.Linq<Entity>();
    query.Expand("Property1");
    query.Expand("Property2");
    return query.ToList();
}
person Paco    schedule 06.05.2009
comment
или query.Expand (Свойство1, Свойство2); - person Sprintstar; 20.08.2009
comment
Это метод расширения? Не могу найти его в NHibernate.Linq v2.0.50727. - person Arnis Lapsa; 06.10.2009
comment
Он есть на сайте 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
comment
если Orders имеет собственный подкласс, будет ли он загружаться с нетерпением? если нет - как бы вы изменили запрос для его загрузки? - person ilans; 15.12.2016
comment
Чтобы получить внуков: 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