/ / Configurando o cache de segundo nível do NHibernate em um aplicativo MVC - asp.net-mvc, nhibernate, armazenamento em cache

Configurando o cache de segundo nível do NHibernate em um aplicativo MVC - asp.net-mvc, nhibernate, armazenamento em cache

Eu tenho um aplicativo MVC3 que está usando o NHibernate. Tudo estava indo bem até que comecei a tentar adicionar cache de segundo nível. Depois de navegar na web por algumas horas eu finalmente encontrei o que eu acho que é a dll certa (NHibernate.Caches.SysCache2.dll) e adicionei-o ao meu projeto.

No entanto, não consigo encontrar ajuda para configurá-locom um aplicativo MVC. Todos os exemplos se referem a ter um arquivo App.config (eu presumo que isso seja para formulários da Web). Eu sou um desenvolvedor Java que está aprendendo .Net, então eu não estou tão familiarizado com a forma de montar tudo.

Alguém poderia me apontar na direção certa. Eu estou usando arquivos xml hibernate (hbm).

Obrigado.

Respostas:

9 para resposta № 1

Eu estou usando o cache de nível 2 com MVC3 e NHibernate.Caches.SysCache.dll como este ...

Primeiro, adicione uma seção de configuração ao seu arquivo web.config como este

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

adicione uma seção syscache ao seu web.config em sua seção de configuração como esta:

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

no meu arquivo hibernate.cfg.xml eu tenho as seguintes propriedades adicionadas:

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

Eu estou usando FluentNhibernate para criar meus mapeamentos e adicionar isso para suportar o cache:

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

E, em seguida, no meu código de acesso a dados, tenho algo semelhante a isso para consultas que eu quero em cache:

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

Aqui estão alguns links úteis para entrar um poucoMais detalhes. Não há nada específico sobre o MVC3 com o qual você precise se preocupar, e a maioria está inalterada em relação às versões anteriores do NHibernate, até onde eu sei.

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/