Свободный кеш первого уровня не работает должным образом

У меня есть функция, которая вызывается много раз за один сеанс. Насколько я понимаю, с кэш-памятью первого уровня NHibernate точный запрос в том же сеансе будет выполняться только один раз, независимо от количества вызовов.

Это не тот случай, хотя. Ниже приведен фрагмент кода, и я вижу, как запрос выполняется в NHProfiler столько раз, сколько вызывается функция.

    public List<CustomerType> GetAllActiveCustomerTypes()
    {
        return _unitOfWork.CurrentSession.QueryOver<CustomerType>().Where(x => x.Active).List();
    }

Я что-то упускаю в понимании NHibernate здесь?

Спасибо

1 ответ

Решение

Ваш опыт правильный. Запросы не кэшируются кешем первого уровня сеансов. Чтобы расширить понимание, прочтите это: Кэширование первого и второго уровня в NHibernate

Извлечение кеша первого уровня:

... Кэш первого уровня также называется картой идентификаторов и используется не только для уменьшения количества обращений к базе данных для повышения скорости работы приложения, но также для гарантии того, что не существует двух отдельных экземпляров объекта. имея тот же идентификатор...

а также

...При использовании NHibernate кэш первого уровня автоматически включается, если используется стандартный объект сеанса... Когда NHibernate загружает объект по его уникальному идентификатору из базы данных, он автоматически помещается в так называемую карту идентификации...

Как сказано, это служит для entity цели кеширования.

Извлечение кэша второго уровня:

  • ... может кэшировать отдельные объекты или целые агрегаты в кеше 2-го уровня.
  • ... также может кэшировать (сложные и / или трудоемкие) запросы в кеше 2-го уровня.
Другие вопросы по тегам