NHibernate L2 Cache - свободная конфигурация nHibernate

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

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

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

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

1 ответ

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

.Database(MsSqlConfiguration.MsSql2008
    .ConnectionString(c => c.FromConnectionStringWithKey(csStringName))
    .ShowSql()
    .Cache(cache=>cache.ProviderClass<NHibernate.Caches.SysCache2.SysCacheProvider()
    .UseQueryCache()))
Другие вопросы по тегам