У мене є додаток MVC3, який використовує NHibernate. Все йшло добре, поки я почав спробувати додати кешування другого рівня. Проглянувши Інтернет протягом декількох годин, я нарешті знайшов те, що, на мою думку, правильний dll (NHibernate.Caches.SysCache2.dll) і додав його до мого проекту.
Проте я не можу знайти будь-яку допомогу для його налаштуванняз додатком MVC. Всі приклади стосуються наявності файлу App.config (я вважаю, що це для веб-форм). Я розробник Java, який вивчає .Net, тому я не дуже знайомий з тим, як підготувати все.
Чи може хтось вказати мені в правильному напрямку? Я використовую файли xml hibernate (hbm).
Дякую.
Відповіді:
9 для відповіді № 1Я використовую 2-го рівня кешування з MVC3 і NHibernate.Caches.SysCache.dll, як це ...
1-е, додати розділ конфігурації до вашого файлу web.config, як це
<configSections>
<section name="syscache" type="NHibernate.Caches.SysCache.SysCacheSectionHandler, NHibernate.Caches.SysCache, Version=3.0.0.4000, Culture=neutral, PublicKeyToken=6876f2ea66c9f443"/>
</configSections>
додайте розділ "Системний аналіз" до свого веб-конфігурації у розділі налаштування, як це:
<syscache>
<cache region="SomeCustomNameRegion" expiration="86400" priority="5" />
</syscache>
у файлі hibernate.cfg.xml у мене є такі властивості:
<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<property name="cache.use_query_cache">true</property>
<property name="cache.use_second_level_cache">true</property>
Я використовую FluentNhibernate для створення моїх відображення та додати це для підтримки кешування:
public CustomerClassMap()
{
Cache.NonStrictReadWrite();
Id(x => x.Id);
Map(x => x.Name);
//... more properties
}
А потім, у своєму коді доступу до даних, у мене є щось схоже на це для запитів, які я хочу зберегти в кеш:
public IEnumerable<Customer> GetAllCached()
{
return Session.CreateCriteria(typeof(Customer))
.SetCacheable(true)
.SetCacheRegion("SomeCustomNameRegion")
.SetCacheMode(CacheMode.Normal)
.AddOrder(Order.Desc("CreateDate"))
.List<Customer>();
}
Ось деякі корисні посилання, щоб отримати трохидокладніше. Існує нічого конкретного про MVC3, що вам потрібно турбуватися, і більшість із попередніх версій NHibernate більшою мірою, наскільки я можу сказати.
http://www.klopfenstein.net/lorenz.aspx/using-syscache-as-secondary-cache-in-nhibernate
http://blog.symbiotic-development.com/2008/02/27/more-configuring-nhibernate-caches/