кэшировать всю таблицу с помощью NHibernate - PullRequest
1 голос
/ 09 июля 2011

Есть ли способ сообщить NHibernate (2.0), что вся таблица всегда должна храниться в кэше 2-го уровня? Или есть способ перехватить промах кэша, или когда NHibernate пытается загрузить одну сущность и перенаправить этот запрос для загрузки всей таблицы?

Ответы [ 3 ]

2 голосов
/ 09 июля 2011

Самое простое было бы включить кэширование 2-го уровня для этой сущности и при запуске приложения выполнить запрос, который бы загрузил их все.
Это не гарантирует , что это 'всегда будет там (кеш может быть очищен / удален по многим причинам), но это может быть достаточно для вас.

В качестве альтернативы - вы можете реализовать это самостоятельно, просто используя System.Cache

0 голосов
/ 09 июля 2011

Нам нужно создать пользовательскую функцию Get вместо session.Get (). Сначала получите IEntityPersister: session.GetSessionImplementation (). GetEntityPersister (new T ()). Ужасно, потому что нет перегрузки с параметром Type, но работает. Затем мы можем получить кеш и проверить, находится ли сущность в кеше. Если это не так, загрузите все элементы из базы данных. Таким образом, при использовании этой пользовательской функции Get, NHibernate никогда не будет загружать объекты по одному, но все сразу, и будет их кэшировать до истечения срока действия, а затем загружать их снова таким же образом.

0 голосов
/ 09 июля 2011

Вы видели этот другой пост на S.O ? Хорошо, это спящий режим, но я подозреваю, что вы можете применить те же принципы к NHibernate.

В итоге мы решили эту проблему, сохранив Память первичные ключи ко всем сущности в таблице нам нужно загрузить (потому что они данные шаблона и нет новых шаблонов добавлены / удалены).

Тогда мы могли бы использовать этот список первичных ключи для поиска каждой сущности и использовать Hibernates 1-го и 2-го уровня кэш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...