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/
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
Probabilmente vale la pena sottolineare che se si utilizza SysCache2, è necessario assegnare un nome all'elemento di configurazione "syscache2" anziché a "syscache". –