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

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

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


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


Ответы (2)


Что ж, я обнаружил, что кеш второго уровня не может узнать, была ли изменена база данных вне 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

person MateusBello    schedule 11.02.2013

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

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

person Andy H    schedule 23.05.2013