2011-01-31 11 views
7

Tengo una aplicación MVC3 que está utilizando NHibernate. Todo iba bien hasta que comencé a intentar agregar almacenamiento en caché de segundo nivel. Después de navegar por la web durante unas horas, finalmente encontré lo que creo que es el dll correcto (NHibernate.Caches.SysCache2.dll) y lo he agregado a mi proyecto.Configuración del almacenamiento en caché de segundo nivel NHibernate en una aplicación MVC

Sin embargo, no puedo encontrar ayuda para configurarlo con una aplicación MVC. Todos los ejemplos se refieren a tener un archivo App.config (supongo que esto es para formularios web). Soy un desarrollador de Java que está aprendiendo .Net, así que no estoy tan familiarizado con cómo armarlo todo.

Podría alguien señalarme en la dirección correcta. Estoy usando archivos xml hibernate (hbm).

Gracias.

Respuesta

9

estoy usando segundo nivel de almacenamiento en caché con MVC3 y NHibernate.Caches.SysCache.dll así ...

primero, añadir una sección de configuración a su archivo web.config como esto

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

añadir una sección syscache a su web.config debajo de la sección de configuración de la siguiente manera:

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

en mi archivo hibernate.cfg.xml tengo las siguientes propiedades añadido:

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

estoy usando FluentNhibernate para crear mis asignaciones y añadir esta para apoyar el almacenamiento en caché:

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

Y luego, en mi código de acceso a datos, tengo algo similar a esto para las consultas que quiero en caché :

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

Aquí hay algunos enlaces útiles para entrar un poco más en detalle. No hay nada específico acerca de MVC3 que deba preocuparse, y la mayor parte no ha cambiado desde versiones anteriores de NHibernate hasta donde yo sé.

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

Gran - gracias por eso. Funcionó perfectamente Todavía recibo algunos mensajes de esquema en el archivo web.config para el elemento syscache, pero solo son advertencias. Gracias de nuevo. – Matt

+1

Probablemente vale la pena señalar que si usa SysCache2, debe nombrar su elemento de configuración "syscache2" en lugar de "syscache". –

Cuestiones relacionadas