2011-01-31 3 views
7

J'ai une application MVC3 qui utilise NHibernate. Tout allait bien jusqu'à ce que je commence à essayer d'ajouter une mise en cache de second niveau. Après avoir navigué sur le web pendant quelques heures, j'ai finalement trouvé ce que je pense être la bonne DLL (NHibernate.Caches.SysCache2.dll) et l'ai ajouté à mon projet.Configuration de la mise en cache de second niveau NHibernate dans une application MVC

Cependant, je ne trouve aucune aide pour la configuration avec une application MVC. Tous les exemples se réfèrent à un fichier App.config (je suppose que c'est pour les formulaires Web). Je suis un développeur Java qui apprend Internet. Je ne suis donc pas très familier avec la façon de tout faire.

Est-ce que quelqu'un pourrait me diriger dans la bonne direction? J'utilise des fichiers xml hibernate (hbm).

Merci.

Répondre

9

J'utilise la mise en cache de niveau 2 avec MVC3 et NHibernate.Caches.SysCache.dll comme ça ...

1er, ajoutez une section de configuration à votre fichier web.config comme celui-ci

<configSections> 
    <section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler, NHibernate.Caches.SysCache, Version=3.0.0.4000, Culture=neutral, PublicKeyToken=6876f2ea66c9f443"/> 
</configSections> 

ajouter une section syscache à votre web.config sous votre section de configuration comme ceci:

<syscache> 
    <cache region="SomeCustomNameRegion" expiration="86400" priority="5" /> 
</syscache> 

dans mon dossier hibernate.cfg.xml i les propriétés suivantes ajouté:

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

J'utilise FluentNhibernate pour créer mes applications et ajouter à soutenir la mise en cache:

public CustomerClassMap() 
{ 
    Cache.NonStrictReadWrite(); 
    Id(x => x.Id); 
    Map(x => x.Name); 
    //... more properties 
} 

Et puis dans mon code d'accès aux données, j'ai quelque chose de similaire à ce pour les requêtes que je veux en cache :

public IEnumerable<Customer> GetAllCached() 
{ 
    return Session.CreateCriteria(typeof(Customer)) 
      .SetCacheable(true) 
      .SetCacheRegion("SomeCustomNameRegion") 
      .SetCacheMode(CacheMode.Normal) 
      .AddOrder(Order.Desc("CreateDate")) 
      .List<Customer>(); 
} 

Voici quelques liens utiles pour entrer dans un peu plus de détails. Il n'y a rien de spécifique à propos de MVC3 dont vous ayez à vous inquiéter, et la plupart des versions antérieures de NHibernate sont inchangées pour autant que je sache.

http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate

http://blog.symbiotic-development.com/2008/02/27/more-configuring-nhibernate-caches/

+0

Grand - merci pour cela. Travaillé parfaitement. Je reçois toujours des messages de schéma dans le fichier web.config pour l'élément syscache mais ce ne sont que des avertissements. Merci encore. – Matt

+1

Il vaut probablement la peine de souligner que si vous utilisez SysCache2, vous devez nommer votre élément de configuration "syscache2" au lieu de "syscache". –

Questions connexes