nhibernate caching second-level-cache isession

Eliminar objetos de la memoria caché de segundo nivel NHibernate



caching second-level-cache (1)

Empecé a pensar en usar el caché NHibernate de segundo nivel en una de mis aplicaciones. Probablemente usaría el NHibernate.Caches.SysCache.SysCacheProvider que se basa en el caché de ASP.net.

La habilitación del caché no fue un problema, pero me pregunto cómo administrar el caché, por ejemplo, eliminando de forma programática ciertas entidades del caché, etc.

Mi aplicación es algún tipo de base de datos de imágenes. El usuario carga imágenes en un back-end y puede /ImageDb/Show?userId=someUserId en la interfaz accediendo a /ImageDb/Show?userId=someUserId

Los datos no cambian muy a menudo. Y si cambia, los usuarios no importarían un botón llamado "limpiar mi caché" en el back-end que elimina los objetos en caché para este usuario de la caché.

Encontré una solución en línea que puede eliminar todos los objetos en caché de la memoria caché de segundo nivel nhibernates. Pero eso es un poco demasiado brutal para mí ... No quiero borrar todo el caché para docenas de usuarios solo porque un usuario intentó borrar el caché para sus propios datos.

Entonces, básicamente, lo que quería hacer era eliminar selectivamente los objetos db almacenados en caché de la caché de segundo nivel de nhibernates en C #.

es posible? Supongo que también depende del proveedor de caché. Si esto no es factible con el proveedor de caché de ASP.net, estoy abierto para otras sugerencias de fuente incorporada / abierta.


sessionFactory proporciona los métodos que desea ... del capítulo 19.3 de la referencia de NHibernate :

Para desalojar completamente todos los objetos de la memoria caché de la sesión, llame a ISession.Clear () Para la memoria caché de segundo nivel, hay métodos definidos en ISessionFactory para desalojar el estado de una instancia, clase completa, instancia de colección o rol de colección completo.

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