Eliminación de objetos de la caché de segundo nivel de NHibernate


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

Habilitar la caché no fue un problema, pero me pregunto cómo administrar la caché, por ejemplo, eliminando programáticamente ciertas entidades de la caché, etc.

Mi aplicación es una especie de base de datos de imágenes. El usuario carga imágenes a través de un backend y puede verlas en el frontend accediendo a /ImageDb/Show?userId=someUserId

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

Encontré una solución en línea que puede eliminar todos los objetos almacenados en caché de nhibernates segundo nivel de caché. Pero eso es demasiado fuerza bruta para mí ... No quiero borrar toda la caché para docenas de usuarios solo porque un usuario trató de borrar la caché de sus propios datos.

Entonces lo que básicamente quería hacer: eliminar selectivamente objetos de base de datos almacenados en caché de la caché de segundo nivel de nhibernates en C#.

Es esto posible? Supongo que también depende del proveedor de caché. Si esto no es factible con el ASP.net proveedor de caché, estoy abierto para otras sugerencias integradas / de código abierto.

Author: Jonathan Rauch, 2009-11-22

1 answers

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

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

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
 43
Author: Jaguar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-04 10:36:38