2009-10-01 11 views

Odpowiedz

31

Pracuję w podobnej sytuacji, w której chcę tylko buforować określone elementy i chcę, aby te elementy były ładowane jeden raz podczas uruchamiania i przechowywane w pamięci podręcznej, dopóki aplikacja nie zostanie zamknięta. Jest to pamięć podręczna tylko do odczytu i służy do zapełniania listy krajów, dzięki czemu użytkownik może wybrać swój kraj z listy.

użyłem FluentNhibernate mapowań, i określono kraj moją klasę z Cache.readonly()

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

Moja klasa użytkownik mapa wygląda następująco:

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"); 
} 

ja ręcznie skonfigurować Fluent NHibernate używać drugie poziom pamięci podręcznej. Więc w moim płynną Confuguration mam:

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(); 

Sprawdziłem w SQL Profiler, a kiedy uzyskać listę otoczony przez użytkownika, są ładowane raz i mam cache uderza po każdy inny wniosek. Fajną rzeczą jest to, że wyświetlając nazwę kraju użytkownika, ładuje się z pamięci podręcznej i nie wysyła żądania do bazy danych. Dostałem kilka wskazówek z tego posta pod numerem Gabriel Schenker. Nadzieja, która pomaga? Jeśli znalazłeś lepszy/właściwy sposób, proszę dać mi znać? Dzięki!

+0

Dobra odpowiedź! Zrobiłem też to, co zrobiłeś. Preferuję NhProf Ayende do profilowania, o wiele lepiej niż profilera SQL, ale nie jest on darmowy (istnieje próba) i jest specyficzny dla NHibernate. –

+0

Yip, widziałem kilka ekranów NHProf, wygląda dobrze. Może spróbujemy zanim zaczniemy żyć. –

+0

Teraz używam nhprof! to jest świetna pomoc! –