Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Кэш второго уровня NHibernate с уведомлением об изменении базы данных в настольном приложении

Автор вопроса: MateusBelloОтветов: 2

Я разрабатываю приложение WPF с использованием NHibernate для связи с базой данных PostgreSQL. Единственный провайдер кеширования, который работает с настольным приложением, - это Bamboo Prevalence (поправьте меня, если я ошибаюсь). Учитывая, что на каждом компьютере, на котором запущено мое приложение, будет другая фабрика сеансов, мое приложение извлекает устаревшие данные из кеша.

У меня вопрос: как я могу сообщить NHibernate / Prevalence, что нужно посмотреть метку времени последнего обновления данных, и, если кеш устарел, обновить его?

  • Ваше предположение неверно - все кеши работают во всех типах приложений. Diego Mijelshon 25.01.2013
  • Я не уверен в этом, например, SYSCACHE полагается на System.Web.Cache, и Microsoft не рекомендует использовать его в настольных приложениях. MateusBello 29.01.2013
  • Пожалуйста, попробуйте ... Где именно вы читали, не рекомендуется? Diego Mijelshon 29.01.2013
  • Если System.Web.Cache подходит для настольных приложений, почему это должен быть модуль ASP.NET? В любом случае, я нашел поставщика кеша, который реализует System.Runtime.Caching, подробнее о моем ответе ниже. MateusBello 11.02.2013

desktop-applicationbamboonhibernatesecond-level-cache

Ответы

Ответ 1 · MateusBello

Что ж, я обнаружил, что кеш второго уровня не может узнать, была ли изменена база данных вне Nhibernate / Cache, поэтому я создал новый столбец "Timestamp" во всех моих таблицах.

В своих запросах я сначала выбираю метку времени базы данных, используя Session.Cachemode (CacheMode.Ignore), чтобы получить метку времени базы данных, и сравниваю с результатом из кеша. В случае, если временные метки различаются, я аннулирую кеш для этого запроса и снова запускаю его.

Что касается SysCache, то даже зная, что он "может работать" в настольном приложении WPF, я не очень хотел использовать System.Web.Cache, поскольку моему приложению потребовалась бы полная .Net Framework вместо клиентского профиля. Я поискал, и, к моему счастью, кто-то написал кеш-провайвер Nhiberate, который реализует (System.Runtime.Caching), ведьма не является компонентом ASP.Net. Если кому-то интересно, вы можете найти источник по адресу: https://github.com/Leftyx/nhcontrib/tree/master/src/NHibernate.Caches/MemoryCache

Ответ 2 · Andy H

Что ж, это свойство, которое вы можете установить на уровне кеша и истечь элементы в соответствии с потребностями вашего приложения, а затем получить кеш. Ncache - возможный поставщик кэша L2 для NHibernate. NCache гарантирует, что его кэш согласован на нескольких серверах, а все обновления кеша синхронизируются правильно, поэтому не возникает проблем с целостностью данных. Чтобы узнать больше, посетите:

http://www.alachisoft.com/ncache/nhibernate-l2cache-index.html

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы