Question

Je viens de commencer à penser à l'utilisation du cache de second niveau NHibernate dans l'une de mes applications. Je serais probablement utiliser la NHibernate.Caches.SysCache.SysCacheProvider qui repose sur le cache ASP.net.

L'activation du cache n'a pas été un problème, mais je me demande sur la façon de gérer le cache e. g. la suppression de certaines entités de programme du cache, etc.

Mon application est une sorte de base de données d'images. L'utilisateur télécharge des images sur un serveur et peut la voir dans le frontend en accédant /ImageDb/Show?userId=someUserId

Les données ne change pas très souvent. Et si elle change, les utilisateurs n'importe un bouton nommé « vider mon cache » dans le back-end qui supprime les objets mis en cache pour cet utilisateur à partir du cache.

J'ai trouvé une solution en ligne qui peut supprimer tous objets mis en cache de nhibernates cache de second niveau. Mais c'est un peu trop la force brute pour moi ... Je ne veux pas effacer le cache entier pour des dizaines d'utilisateurs simplement parce qu'un utilisateur a essayé d'effacer le cache pour ses propres données.

Alors, ce que je voulais essentiellement faire:. Éliminer sélectivement des objets db mises en cache de nhibernates cache de second niveau en C #

Est-ce possible? Je suppose que cela dépend aussi du fournisseur de cache. Si ce n'est pas faisable avec le fournisseur de cache ASP.net, je suis ouvert à d'autres construit / suggestions open source.

Était-ce utile?

La solution

le sessionFactory fournit les méthodes que vous voulez ... de la 19,3 chapitre de la de référence NHibernate:

Pour retirer tous les objets du cache de session, appelez ISession.Clear () Pour le cache de second niveau, il existe des méthodes définies sur ISessionFactory pour expulsant l'état d'un cache par exemple, la classe entière, instance de collection ou le rôle entier de collection.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top