Removendo objetos de Nibernate Segundo Cache
-
21-09-2019 - |
Pergunta
Comecei a pensar em usar o cache de segundo nível Nibernate em um dos meus aplicativos. Eu provavelmente usaria o NHibernate.Caches.SysCache.SysCacheProvider
que depende do cache asp.net.
Habilitar o cache não era um problema, mas estou me perguntando como gerenciar o cache, por exemplo, removendo programaticamente certas entidades do cache etc.
Meu aplicativo é algum tipo de banco de dados de imagem. O usuário carrega imagens em um back -end e pode visualizá -las no frontend acessando /ImageDb/Show?userId=someUserId
Os dados não mudam com muita frequência. E se isso mudar, os usuários não importariam um botão chamado "Limpar meu cache" no back -end que remove os objetos em cache para este usuário do cache.
Encontrei uma solução online que pode remover tudo Objetos em cache do cache do segundo nível. Mas isso é um pouco muito bruto para mim ... Eu não quero limpar todo o cache para dezenas de usuários apenas porque um usuário tentou limpar o cache para seus próprios dados.
Então, o que eu basicamente queria fazer: remover seletivamente os objetos DB em cache do cache do segundo nível Nibernates em C#.
Isso é possível? Eu acho que também depende do provedor de cache. Se isso não for possível com o provedor de cache do ASP.NET, estou aberto para outras sugestões de código aberto integradas.
Solução
O Factory Session fornece os métodos que você deseja ... do 19.3 Capítulo da referência Nibernate:
Para despejar completamente todos os objetos do cache da sessão, Call isession.clear () para o cache de segundo nível, existem métodos definidos no ISessionFactory para despejar o estado em cache de uma instância, classe inteira, instância de coleta ou função de coleta inteira.
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