Настройка кэширования второго уровня NHibernate в приложении MVC - PullRequest
7 голосов
/ 31 января 2011

У меня есть приложение MVC3, которое использует NHibernate.Все шло хорошо, пока я не попытался добавить кэширование второго уровня.После просмотра веб-страниц в течение нескольких часов я, наконец, нашел то, что я считаю правильным dll (NHibernate.Caches.SysCache2.dll), и добавил его в свой проект.

Однако я не могу найти никакой помощидля его настройки с помощью приложения MVC.Все примеры относятся к наличию файла App.config (я предполагаю, что это для веб-форм).Я Java-разработчик, который изучает .Net, поэтому я не очень разбираюсь в том, как все настроить.

Может ли кто-нибудь указать мне правильное направление.Я использую XML-файлы Hibernate (HBM).

Спасибо.

1 Ответ

9 голосов
/ 31 января 2011

Я использую кэширование 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 в ваш 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 / более-настройка-NHibernate-кэша /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...