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()))