Próbuję dowiedzieć się, jak buforować dołączył kwerendy przy użyciu NHibernate i nie wydaje się, jakby jej działa prawidłowoDlaczego w tym przykładzie nie pobiera się nhibernate z pamięci podręcznej?
Oto mój kod:
public CacheTestViewModel GetCacheTestViewModel()
{
var vm = new CacheTestViewModel();
var session = Repository.Session;
using (var tx = session.BeginTransaction())
{
vm.Projects = Repository.Session.Query<Project>()
.FetchMany(r=>r.ProjectApplications)
.ThenFetch(r=>r.Application)
.Cacheable().CacheMode(CacheMode.Normal)
.ToList();
tx.Commit();
}
return vm;
}
biegnę to w kółko i wydaje się ładować obiekty projektu z pamięci podręcznej drugiego poziomu, ale nadal wraca do bazy danych, aby zapytać obiekty ProjectApplication, które są dość powolne.
Czy jest możliwe, aby nhibernate buforował to całe zapytanie, aby cały wykres został zwrócony z pamięci podręcznej?
UWAGA: mam zapytanie cache włączony, a także wszystkich podmiotów określonych w Cache.ReadWrite()
Oto moja konfiguracja cache
return configuration
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ApplicationMap>().Conventions.Add(typeof(Conventions)))
.ExposeConfiguration(
c => {
// c.SetProperty("proxyfactory.factory_class", proxyFactory);
c.SetProperty("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache");
c.SetProperty("cache.use_second_level_cache", "true");
c.SetProperty("cache.use_query_cache", "true");
c.SetProperty("expiration", "86400");
})
.BuildSessionFactory();
Czy możesz pokazać konfigurację pamięci podręcznej? – Najera
@Najera - Dodałem moją konfigurację pamięci podręcznej – leora