2016-04-06 5 views
1

У меня возникли проблемы с запросом Linq NHibernate.NHibernate коллекция нетерпевая загрузка принимает счет

Мне нужно получить партию ваучеров с их деталями. Поскольку мне нужно повторить их, я хотел бы получить всю информацию за одно исполнение.

Мой запрос заключается в следующем:

   return this.Session.Query<VouchersToIntegrate>() 
       .Take(query.BatchSize) 
       .Fetch(x => x.VoucherLines)      
       .ToList(); 

Где VouchersToIntegrate является ваучер и VoucherLines линии каждого ваучера.

Теперь пакет batchSize установлен на 50.000, но когда я возвращаю все объекты, я просто получаю 23XXX. Это связано с тем, что я предполагаю, что структура внутренне выполняет отдельный элемент после того, как получает все объекты из базы данных (на стороне клиента). Есть ли другой способ получить 50 000 объектов с отдельным фильтром на стороне SQL-сервера?

Благодаря

+0

Итерация по ленивым загруженным свойствам с помощью NHibernate не вызывает проблем с n + 1 при загрузке, если вы правильно настроили свои объекты. См. [Это более подробное объяснение] (/ a/36070727/1178314). Поэтому, если вы хотите получать нагрузку, потому что у вас есть проблема с загрузкой n + 1, вы должны ее прочитать. –

ответ

0

Существует не способ построить этот запрос с помощью поставщика LINQ NHibernate в.

Вы можете, однако, построить соответствующий запрос SQL вручную, а затем сопоставить его с объектами, использующими API-интерфейс NHibernate «Native SQL»: http://nhibernate.info/doc/nhibernate-reference/querysql.html.