2009-10-01 5 views

Répondre

31

J'ai travaillé dans une situation similaire, où je veux juste mettre en cache des éléments spécifiques, et je veux que ces éléments soient chargés une fois au démarrage, et conservés dans le cache, jusqu'à ce que l'application soit fermée. Ceci est un cache en lecture seule, et est utilisé pour remplir une liste de pays, de sorte qu'un utilisateur peut sélectionner son pays dans la liste.

J'utilisé fluentNhibernate Mappages et défini Pays ma classe avec Cache.readonly()

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

Ma carte de classe d'utilisateur 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"); 
} 

-je configurer manuellement Fluent NHibernate utiliser Second niveau de cache. Donc, dans mon Confuguration couramment je:

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 profileur SQL, et quand je reçois une liste de countrys pour un utilisateur, le sont chargées à la fois, et je reçois frappe cache après chaque autre demande. La bonne chose est que lors de l'affichage du nom du pays des utilisateurs, il charge à partir du cache, et ne fait pas une demande à la base de données. J'ai reçu quelques conseils de cette publication par Gabriel Schenker. J'espère que cela pourra aider? Si vous avez trouvé une meilleure/bonne façon, s'il vous plaît faites le moi savoir? Merci!

+0

Bonne réponse! J'ai fait ce que tu as fait avec succès aussi. Je préfère le NhProf d'Ayende pour le profilage, bien meilleur que le profileur SQL, mais ce n'est pas gratuit (il y a un essai) et c'est spécifique à NHibernate. –

+0

Yip, j'ai vu quelques screensots de NHProf, ça a l'air bien. Peut-être essayer avant d'aller vivre. –

+0

J'utilise maintenant nhprof! c'est une aide précieuse! –

Questions connexes