Вопрос

Я только начал подумывать об использовании кэша второго уровня NHibernate в одном из моих приложений.Я бы, вероятно, использовал NHibernate.Caches.SysCache.SysCacheProvider который полагается на ASP.net кэш.

Включение кэша не было проблемой, но мне интересно, как управлять кэшем e.g.программно удаляя определенные объекты из кэша и т.д.

Мое приложение - это своего рода база данных изображений.Пользователь загружает изображения через серверную часть и может просматривать их во внешнем интерфейсе, перейдя /ImageDb/Show?userId=someUserId

Данные меняются не очень часто.И если это изменится, для пользователей не будет иметь значения кнопка с именем "очистить мой кэш" в серверной части, которая удаляет кэшированные объекты для этот пользователь из кэша.

Я нашел решение в Интернете, которое может удалить ВСЕ кэшированные объекты из кэша второго уровня nhibernates.Но для меня это слишком грубая сила ...Я не хочу очищать весь кэш для десятков пользователей только потому, что один пользователь попытался очистить кэш для своих собственных данных.

Итак, что я в принципе хотел сделать:выборочно удаляйте кэшированные объекты базы данных из кэша второго уровня nhibernates в C #.

Возможно ли это?Я предполагаю, что это также зависит от поставщика кэша.Если это невозможно с помощью поставщика кэша ASP.net Я открыт для других предложений по встроенному / открытому исходному коду.

Это было полезно?

Решение

SessionFactory предоставляет нужные вам методы...из 19.3 глава справочника NHibernate:

Чтобы полностью удалить все объекты из кэша сеанса, вызовите ISession.Очистить() Для кэша второго уровня в ISessionFactory определены методы для удаления кэшированного состояния экземпляра, всего класса, экземпляра коллекции или всей роли коллекции.

sessionFactory.Evict(typeof(Cat), catId); //evict a particular Cat
sessionFactory.Evict(typeof(Cat)); //evict all Cats
sessionFactory.EvictCollection("Eg.Cat.Kittens", catId); //evict a particular collection of kittens
sessionFactory.EvictCollection("Eg.Cat.Kittens"); //evict all kitten collections
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top