2010-05-07 6 views
1

J'utilise un nhibernate fluide avec asp.net mvc et je ne vois rien être mis en cache lorsque je fais des requêtes sur la base de données. Je n'utilise pas actuellement une implémentation de cache L2.nhibernate fluide ne met pas en cache les requêtes dans asp.net mvc

Dois-je voir les requêtes mises en cache sans configurer un cache L2 hors processus?

Mapping sont comme ceci:

Table("ApplicationCategories"); 
Not.LazyLoad(); 
Cache.ReadWrite().IncludeAll(); 
Id(x => x.Id); 
Map(x => x.Name).Not.Nullable(); 
Map(x => x.Description).Nullable(); 

Critères Exemple:

return session 
      .CreateCriteria<ApplicationCategory>() 
      .Add(Restrictions.Eq("Name", _name)) 
      .SetCacheable(true); 

Chaque fois que je fais une demande d'cateogry d'application par son nom, il frappe la base de données est ce comportement attendu?

+0

Avez-vous activé le cache de requête? Si oui, quelle est la configuration? – Paco

Répondre

3

La mise en cache de niveau 1 se fait uniquement au niveau de la session, une fois que vous disposez de cette session, votre cache va avec. Je suppose, comme la plupart des applications web, que vous allez faire une session par requête; Dans ce cas, il est tout à fait normal qu'il frappe la base de données à chaque fois. Le cache de niveau 1 est particulièrement utile lorsque vous exécutez les mêmes requêtes (ou des requêtes similaires) dans la même session, et dans ce cas, vous ne voyez qu'un seul appel à la base de données.

+0

DOH! - Ouais est parfaitement logique maintenant ... – AwkwardCoder

1

Vous devez activer le cache de second niveau et le cache de requête afin de mettre en cache les requêtes.

Ceci a rien à * à faire avec la mise en cache de "niveau 1" (carte d'identité de session).

Si vous ajoutez les propriétés suivantes à votre fichier de configuration NHibernate:

<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property> 
<property name="cache.use_query_cache">true</property> 

... Le DB ne sera pas touché dans les appels suivants.

Questions connexes