Привязать 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) запрос

Другие вопросы по тегам