¿Configurar el almacenamiento en caché de entidades y relaciones en Fluent Nhibernate?


¿Alguien tiene un ejemplo de cómo configurar y qué entidades almacenar en caché en fluent nhibernate? ¿Usando fluent mapping y auto mapping?

Y lo mismo para las relaciones de entidad, tanto de uno a muchos como de muchos a muchos?

Author: Dio F, 2009-10-01

1 answers

He estado trabajando en una situación similar, donde solo quiero almacenar en caché elementos específicos, y quiero que estos elementos se carguen una vez al iniciar, y se mantengan en caché, hasta que se cierre la aplicación. Esta es una caché de solo lectura, y se utiliza para rellenar una lista de países, de modo que un usuario puede seleccionar su país de la lista.

Usé Asignaciones de FluentNHibernate, y definí Country mi clase con Caché.readonly()

public class CountryMap : ClassMap<Country> {
    public CountryMap() { 
         Schema("Dropdowns");
         Cache.ReadOnly();
         // Class mappings underneath 
    }
}

Mi mapa de clase de usuario se ve como esto:

public class UserMap : ClassMap<User> {
    Id(x => x.Id).Column("UserId");
    Map(x => x.FirstName);
    Map(x => x.LastName);
    References(x => x.Country)
      .Column("CountryId");
}

Configuro manualmente Fluent Nhibernate para usar caché de segundo nivel. Así que en mi Confuguration fluido tengo:

var sessionFactory = Fluently.Configure()
    .Database (...) // set up db here
    .Mappings(...)  //set up mapping here
    .ExposeConfiguration(c => {
        // People advice not to use NHibernate.Cache.HashtableCacheProvider for production
        c.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider");
        c.SetProperty("cache.use_second_level_cache", "true");
        c.SetProperty("cache.use_query_cache", "true");
    })
    .BuildSessionFactory();

He comprobado en SQL profiler, y cuando tengo una lista de países para un usuario, se cargan una vez, y obtengo visitas de caché después de cada otra solicitud. Lo bueno es que cuando se muestra el nombre del país del usuario, se carga desde la caché, y no hace una solicitud a la base de datos. He recibido algunos consejos de este post por Gabriel Schenker. Esperar ¿eso ayuda? Si usted encontró una mejor / manera apropiada, por favor hágamelo saber? ¡Gracias!

 32
Author: Dai Bok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-06 18:35:07