2014-04-08 13 views
5

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

Czy możesz pokazać konfigurację pamięci podręcznej? – Najera

+0

@Najera - Dodałem moją konfigurację pamięci podręcznej – leora

Odpowiedz

3

Może you're jedne problem z konfiguracją dostawcy pamięci podręcznej. Ive był w stanie zrobić żebyś chcą użyciu Couchbase jako 2-gi poziom operatora cache, jak opisano tutaj:

http://blog.couchbase.com/introducing-nhibernate-couchbase-2nd-level-cache-provider

Jeśli środowisko wdrażania jest na Azure, myślę, że to może być użyteczne. Zauważ, że moduł SysCache nie może współistnieć z modułem AzureMemcached.

http://www.webmoco.com/webmoco-development-blog/orchard-cms-second-level-caching

Powiązane problemy