Ho lavorato a una situazione simile, in cui voglio solo memorizzare nella cache elementi specifici, e voglio che questi elementi vengano caricati una volta all'avvio e conservati nella cache, fino a quando l'applicazione non viene chiusa. Questa è una cache di sola lettura e viene utilizzata per popolare un elenco di paesi, in modo che un utente possa selezionare il proprio paese dall'elenco.
ho usato fluentNhibernate Mapping, e definito Paese mia classe con Cache.readonly()
public class CountryMap : ClassMap<Country> {
public CountryMap() {
Schema("Dropdowns");
Cache.ReadOnly();
// Class mappings underneath
}
}
La mia mappa classe utente si presenta così:
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");
}
ho manualmente configurare Fluent NHibernate da usare Second cache di livello. Così nel mio Confuguration fluente ho:
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();
Ho controllato in SQL Profiler, e quando ho un elenco di countrys per un utente, l'vengono caricati una volta, e ho la cache colpisce dopo ogni altra richiesta. La cosa bella è che durante la visualizzazione del nome del paese dell'utente, viene caricato dalla cache e non effettua una richiesta al database. Ho ricevuto alcuni suggerimenti da questa pubblicazione entro il Gabriel Schenker. Spero possa aiutare? Se hai trovato un modo migliore/corretto, per favore fatemelo sapere? Grazie!
fonte
2009-11-24 11:50:17
Buona risposta! Ho fatto anche quello che hai fatto con successo. Preferisco il NhProf di Ayende per la profilazione, molto meglio di SQL profiler, ma non è gratuito (c'è una versione di prova) ed è specifico di NHibernate. –
Sì, ho visto alcuni screenshot di NHProf, sembra buono. Potresti provare prima di andare a vivere. –
Ora uso nhprof! è un grande aiuto! –