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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top