2010-11-11 44 views
0

J'essaie de me concentrer sur la mise en cache de niveau 2 dans le NHibernate courant. Jusqu'à présent, je l'ai fait ce qui suit:Cache de niveau 2 de Nhibernate pour Newb

  1. Ajout d'une référence à la dll de mise en cache
  2. ajouté ce qui suit quand je crée mon usine de session:

    c.SetProperty ("cache.provider_class", " NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache ");

    c.SetProperty ("cache.use_second_level_cache", "true");

    c.SetProperty ("cache.use_query_cache", "true");

  3. Ajouté Cache.ReadWrite(); contre toutes les entités que je souhaite mettre en cache dans le fichier ClassMap, par ex. Public class CountryMap: ClassMap { public CountryMap() { Table ("Countries"); Id (x => x.CountryID); Carte (x => x.CountryName); Cache.ReadWrite(); }}

Maintenant, je suppose que chaque fois que j'essaie d'obtenir une entité qui a Cache.ReadWrite() dans le mappage il ne cache pendant toute la durée de l'usine de session (singleton). Cependant, il semble que ce n'est pas le cas car la base de données est touchée à chaque requête. Voici quelques questions que j'ai:

  • Que fait la propriété CacheMode de la session? Ma session dure la durée d'une requête Web. Devrais-je définir ceci quand je crée la session et si oui, que dois-je faire?
  • J'ai lu quelque part que le cache n'est pas mis à jour sauf si une validation est faite. Je ne valide les données que lorsque j'insère/met à jour des informations dans la base de données. Par exemple, si j'ai une page simple avec une liste de pays, je saisirais toutes les données nécessaires mais je ne commettrais pas les données car je n'ai pas besoin de faire de changements. Cela signifie-t-il que ces données ne seront pas mises en cache? Je suis sûr que j'ai lu mal, car cela signifierait que les données ne sont mises en cache qu'une fois la base de données ajoutée.

J'apprécierais si vous pouviez aider. Merci

Répondre

3

Here est une très bonne explication pour le cache de second niveau avec nhibernate.

1

Vous devez utiliser des transactions pour le cache de 2ème niveau à utiliser.