1

Мне удалось настроить кэш L2 для Get \ Load в FHN, но он не работает для запросов, настроенных с использованием интерфейса ICriteria, - он не кэширует результаты этих запросов.NHibernate L2 Cache - текущая конфигурация nHibernate

Кто-нибудь знает, почему?

Конфигурации следующим образом:

ICriteria:

return unitOfWork 
     .CurrentSession 
     .CreateCriteria(typeof(Country)) 
     .SetCacheable(true); 

Entity Mapping:

public sealed class CountryMap : ClassMap<Country>, IMap 
{ 
    public CountryMap() 
    { 
     Table("Countries"); 
     Not.LazyLoad(); 
     Cache.ReadWrite().IncludeAll(); 
     Id(x => x.Id); 
     Map(x => x.TwoLetter); 
     Map(x => x.ThreeLetter); 
     Map(x => x.Name); 
    } 
} 

И заводской конфигурации сеанса для свойства базы данных:

return() => MsSqlConfiguration.MsSql2005 
          .ConnectionString(BuildConnectionString()) 
          .ShowSql() 
          .Cache(c => c.UseQueryCache() 
            .QueryCacheFactory<StandardQueryCacheFactory>() 
            .ProviderClass(configuration.RepositoryCacheType) 
            .UseMinimalPuts()) 
          .FormatSql() 
          .UseReflectionOptimizer(); 

Приветствия

AWC

ответ

2

Вы пробовали добавить вызов метода UseQueryCache() в конфигурации?

.Database(MsSqlConfiguration.MsSql2008 
    .ConnectionString(c => c.FromConnectionStringWithKey(csStringName)) 
    .ShowSql() 
    .Cache(cache=>cache.ProviderClass<NHibernate.Caches.SysCache2.SysCacheProvider() 
    .UseQueryCache())) 
Смежные вопросы