Настройка кэширования второго уровня NHibernate в приложении MVC
У меня есть приложение MVC3, которое использует NHibernate. Все шло хорошо, пока я не попытался добавить кэширование второго уровня. После просмотра веб-страниц в течение нескольких часов я наконец-то нашел то, что мне кажется правильным (NHibernate.Caches.SysCache2.dll), и добавил его в свой проект.
Тем не менее, я не могу найти никакой помощи для настройки его с помощью приложения MVC. Все примеры относятся к наличию файла App.config (я предполагаю, что это для веб-форм). Я Java-разработчик, который изучает.Net, поэтому я не очень хорошо разбираюсь в том, как все настроить.
Может ли кто-то указать мне в правильном направлении. Я использую XML-файлы Hibernate (HBM).
Благодарю.
1 ответ
Я использую кэширование 2-го уровня с MVC3 и NHibernate.Caches.SysCache.dll, как это...
Во-первых, добавьте раздел конфигурации в ваш файл 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 в ваш файл web.config в разделе настроек следующим образом:
<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/