he estado trabajando un una situación similar, donde sólo quiero almacenar en caché los elementos específicos, y que estos elementos pueden cargar una vez en la puesta en marcha, y se mantienen en la memoria caché, hasta que la aplicación se cierra. Este es un caché de solo lectura, y se usa para completar una lista de países, de modo que un usuario pueda seleccionar su país de la lista.
que utilizan fluentNhibernate Asignaciones, y define País mi clase con Cache.readonly()
public class CountryMap : ClassMap<Country> {
public CountryMap() {
Schema("Dropdowns");
Cache.ReadOnly();
// Class mappings underneath
}
}
Mi mapa de clase de usuario se ve así:
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");
}
que configurar manualmente Fluido Nhibernate a utilizar Second nivel de caché Así que en mi Confuguration fluidez que 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 el Analizador de SQL, y cuando llego a una lista de los countrys para un usuario, la están cargados de una vez, y me golpea caché después de cada otra petición. Lo bueno es que cuando se muestra el nombre del país de los usuarios, se carga desde el caché y no hace una solicitud a la base de datos. Recibí algunos consejos de esta publicación por Gabriel Schenker. ¿Espero que ayude? Si encontraste una manera mejor/adecuada, házmelo saber. ¡Gracias!
Buena respuesta! He hecho lo que hiciste con éxito también. Prefiero el NhProf de Ayende para el perfil, mucho mejor que el generador de perfiles SQL, pero no es gratuito (hay una versión de prueba) y es específico de NHibernate. –
Yip, he visto algunas pantallas de NHProf, se ve bien. Podría intentarlo antes de que salgamos a la luz. –
¡Ahora uso nhprof! ¡es de gran ayuda! –