J'ai travaillé une situation similaire, où je veux juste le cache des éléments spécifiques, et que vous voulez ces éléments pour être chargée qu'une seule fois au démarrage, et conservés dans la mémoire cache, jusqu'à l'arrêt de l'application. C'est une lecture que cache, et est utilisé pour remplir une liste de pays, de sorte qu'un utilisateur peut sélectionner leur pays dans la liste.
J'ai utilisé fluentNhibernate Mappages, et définie par Pays ma classe avec Cache.readonly()
public class CountryMap : ClassMap<Country> {
public CountryMap() {
Schema("Dropdowns");
Cache.ReadOnly();
// Class mappings underneath
}
}
Ma classe d'utilisateur de la carte ressemble à ceci:
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");
}
J'ai configurer manuellement Couramment Nhibernate pour l'utilisation du cache de Second niveau. Donc, à mon couramment Confuguration j'ai:
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();
J'ai vérifié dans le générateur de profils SQL, et quand j'ai une liste de pays pour un utilisateur, le sont chargées une fois, et je me cache après chaque demande. La bonne chose est que lors de l'affichage d'utilisateurs nom de pays, il charge à partir du cache, et ne pas faire une requête à la base de données. J'ai quelques conseils à partir de cet affichage par Gabriel Schenker. Espérons que cela aide? Si vous avez trouvé un meilleur/la bonne voie, s'il vous plaît laissez-moi savoir? Merci!