Linq для NHibernate и выборочный режим активной загрузки - PullRequest
44 голосов
/ 07 мая 2009

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

Ответы [ 4 ]

105 голосов
/ 06 августа 2010

Новый провайдер Linq делает это немного по-другому:

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

Подробнее здесь: http://mikehadlow.blogspot.com/2010/08/nhibernate-linq-eager-fetching.html

18 голосов
/ 07 мая 2009

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

IList<Entity> GetDataFromDatabase()
{
    var query = session.Linq<Entity>();
    query.Expand("Property1");
    query.Expand("Property2");
    return query.ToList();
}
8 голосов
/ 21 сентября 2009

Насколько я вижу, это не эквивалентно: SetFetchMode увлажняет дерево объектов, а метод Expand извлекает декартово произведение.

1 голос
/ 15 декабря 2016

В ответ на @Mike Hadlow ответ, выбирая следующий уровень (внуков), вам нужно сделать:

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

...