Подтвердить что ты не робот

Удаление объектов из кэша второго уровня NHibernate

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Чтобы полностью выселить все объекты из кеша сеанса, вызовите ISession.Clear() Для кэша второго уровня существуют методы, определенные в 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