Pregunta

Empecé a pensar acerca del uso de la caché de segundo nivel NHibernate en una de mis aplicaciones. Probablemente me volvería a utilizar el NHibernate.Caches.SysCache.SysCacheProvider que se basa en caché ASP.net.

Habilitar la caché no era un problema, pero me pregunto sobre cómo administrar la memoria caché e. sol. la eliminación de ciertas entidades programación de la memoria caché, etc.

Mi solicitud es una especie de base de datos de imagen. Las imágenes subidas por el usuario a través de una backend y pueden verlo en la interfaz accediendo /ImageDb/Show?userId=someUserId

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

He encontrado una solución en línea que puede eliminar todos objetos en caché de nhibernates caché de segundo nivel. Pero eso es un poco demasiado la fuerza bruta para mí ... yo no quiero borrar toda la caché de decenas de usuarios sólo porque un usuario ha intentado borrar la caché de sus propios datos.

Así que, básicamente, lo que quería hacer:. Db eliminar selectivamente objetos almacenados en caché de nhibernates caché de segundo nivel en C #

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

¿Fue útil?

Solución

la sessionFactory proporciona los métodos que desee ... Del 19,3 capítulo de la referencia NHibernate:

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

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top