1

Dans notre configuration de l'application, nous avons NHibernate configuré avec deux secondes caches de niveau et d'interrogation compatibles avec les SysCacheProvider, configurés Couramment ...NHibernate cache de second niveau ne cache les résultats de la requête Cache

.Cache(x => x.UseQueryCache().ProviderClass<SysCacheProvider>().UseSecondLevelCache()) 

Nous avons une entité appelée Lookup qui est marquée avec Cache.ReadOnly() dans son fichier de mappage, et nous l'extrayons en utilisant CreateCriteria avec SetCacheable(true).SetCacheMode(CacheMode.Normal).

Le problème est que le cache de second niveau ne semble pas être utilisé. En utilisant NHProf, nous pouvons voir que la première requête pour récupérer la recherche (par un ID de chaîne unique) est correctement mise en cache, mais à chaque appel, NHibernate va à la base de données pour récupérer la ligne par l'identifiant sql mis en cache. niveau de cache. J'ai tout fait in this blog mais en vain.

Y at-il autre chose que je dois faire, ou y a-t-il des pièges qui peuvent signifier que les entités ne sont pas ajoutées au cache de second niveau?

Répondre

1

Utilisez-vous des transactions?

Si la réponse est non, abandonnez le cache de second niveau ou commencez à utiliser des transactions. Pour s'assurer qu'il ne met en cache que des données valides, le type de cache se désactive lui-même si les données sont modifiées sans utiliser de transaction.

Il s'agit d'un piège courant, en essayant d'utiliser le cache sans utiliser les transactions, comme here. This le confirme aussi. Une autre raison pourrait être ce one, plus difficile.

+0

Ce n'est pas notre problème, mais c'est quelque chose à garder à l'esprit, donc je vais laisser marqué comme correct. – GoatInTheMachine