У меня есть проблема, когда я получаю много данных в NHibernate (например, при создании отчета), страница становится экспоненциально медленнее, чем больше данных она должна извлечь. Я нашел следующую статью:
http://nhforge.org/blogs/nhibernate/archive/2008/10/30/bulk-data-operations-with-nhibernate-s-stateless-sessions.aspx
Это объясняет, как выполнение массовых операций с данными в NHibernate происходит медленно, поскольку кэш первого уровня становится слишком большим, и как вместо этого следует использовать IStatelessSession. Проблема в том, что я не хочу связывать свое приложение с NHibernate, поэтому я добавил оболочку для ISession. Затем я использую Linq в качестве механизма запросов, но IStatelessSession не поддерживает Linq (это может быть в NHibernate 3, но поставщик Linq нестабилен в его текущем состоянии).
Затем я прочитал, что после стольких итераций вы можете очистить кэш первого уровня. Проблема в том, что вы не можете использовать ленивую загрузку. Поставщик linq не позволяет вам переопределить определенное отображение (или с нетерпением извлекать дополнительные данные), поэтому всякий раз, когда я получаю данные, которые загружаются лениво после очистки сеанса, выдается исключение.
Я полностью потерян на том, что делаю сейчас. Мне нравится простота создания отчетов с помощью linq, но ограничения встроенного поставщика linq в NHibernate, похоже, сдерживают меня.
Я бы очень признателен, если бы кто-нибудь показал мне альтернативный подход. Спасибо