Привязать FetchMany в Linq к NHibernate - PullRequest
2 голосов
/ 18 апреля 2011

Я использую FetchMany для некоторых моих запросов, и профилировщик NHibernate выдает мне следующую ошибку:

ПРЕДУПРЕЖДЕНИЕ:
firstResult / maxResults, заданных при получении коллекции;применение в памяти!

Я думаю, это потому, что выборка не связана.Есть ли решение для этого?

1 Ответ

1 голос
/ 27 мая 2011

Эта проблема возникает из-за того, что при использовании FetchMany весь набор результатов будет помещен в память, а затем получен указанный поднабор (что-то неэффективное и потенциально опасное).

Очевидно, что нет способа ограничить подмножество перед извлечением при использовании FetchMany.

Решение состоит в том, чтобы использовать либо JoinQueryOver, либо JoinAlias (различия двух обсуждались в других вопросах SO)

Так настойчиво делать

Session.QueryOver<Product>().FetchMany(p=>p.Images).Take(5)

который выдает предупреждение в вопросе, мы делаем

Image image = null;
Session.QueryOver<Product>().Left.JoinQueryOver(x => x.Images, () => image).Take(5)

, который выдает SELECT TOP (5) запрос

...