¿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?
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!
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