NHibernate L2 Cache - свободная конфигурация nHibernate - PullRequest
1 голос
/ 11 января 2010

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

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

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

ICriteria:

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

Отображение сущностей:

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 Ответ

2 голосов
/ 03 июня 2010

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

.Database(MsSqlConfiguration.MsSql2008
    .ConnectionString(c => c.FromConnectionStringWithKey(csStringName))
    .ShowSql()
    .Cache(cache=>cache.ProviderClass<NHibernate.Caches.SysCache2.SysCacheProvider()
    .UseQueryCache()))
...