2011-01-31 10 views
7

Ho un'app MVC3 che utilizza NHibernate. Tutto andava bene fino a quando ho iniziato a provare ad aggiungere il caching di secondo livello. Dopo aver navigato sul web per alcune ore ho finalmente trovato quello che penso sia la dll giusta (NHibernate.Caches.SysCache2.dll) e l'ho aggiunto al mio progetto.Configurazione della cache di secondo livello NHibernate in un'app MVC

Tuttavia, non riesco a trovare alcun aiuto per la configurazione con un'app MVC. Tutti gli esempi si riferiscono ad avere un file App.config (presumo che questo sia per i Web Form). Sono uno sviluppatore Java che sta imparando .Net quindi non ho molta familiarità con come sistemare tutto.

Qualcuno potrebbe indicarmi la giusta direzione. Sto usando i file hibernate (hbm) xml.

Grazie.

risposta

9

sto usando 2 ° livello di caching con MVC3 e NHibernate.Caches.SysCache.dll così ...

1 °, aggiungere una sezione di configurazione nel file web.config come questo

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

aggiungere una sezione syscache al vostro web.config sotto la sezione di configurazione in questo modo:

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

nel mio file hibernate.cfg.xml ho le seguenti proprietà aggiunto:

<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> 

sto usando FluentNhibernate per creare le mie mappature e aggiungere questo per supportare la cache:

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

E poi nel mio codice di accesso ai dati, ho qualcosa di simile a questo per le query che voglio cache :

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

Ecco alcuni link utili per entrare in un po 'più in dettaglio. Non c'è nulla di specifico su MVC3 di cui devi preoccuparti, e la maggior parte è invariata rispetto alle versioni precedenti di NHibernate, per quanto ne so.

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

Grande - grazie per questo. Ha funzionato perfettamente Ricevo ancora alcuni messaggi di schema nel web.config per l'elemento syscache, ma sono solo avvisi. Grazie ancora. – Matt

+1

Probabilmente vale la pena sottolineare che se si utilizza SysCache2, è necessario assegnare un nome all'elemento di configurazione "syscache2" anziché a "syscache". –

Problemi correlati