Привязать FetchMany в Linq к NHibernate
Я использую FetchMany для некоторых моих запросов, а профилировщик NHibernate выдает мне следующую ошибку:
WARN:
firstResult / maxResults, указанных в выборке коллекции; применяя в памяти!
Я думаю, это потому, что выборка не связана. Есть ли этому решение?
1 ответ
Эта проблема возникает из-за использования 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)
запрос