Проблемы NHIbernate SysCache2 и SQLDependency - PullRequest
3 голосов
/ 04 марта 2010

Я установил enable_broker на моем SQL Server 2008 для использования SQLDepndency

Я настроил свое приложение .Net для использования Syscache2 с областью кэша следующим образом:

  <syscache2>
      <cacheRegion name="BlogEntriesCacheRegion" priority="High">
        <dependencies>
          <commands>
            <add name="BlogEntries" 
                 command="Select EntryId from dbo.Blog_Entries where ENABLED=1" 
            />
          </commands>
        </dependencies>
      </cacheRegion>
  </syscache2>

MyФайл Hbm выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

  <class name="BlogEntry" table="Blog_Entries">

    <cache usage="nonstrict-read-write" region="BlogEntriesCacheRegion"/>
    ....
  </class>
</hibernate-mapping>

У меня также включено кэширование запросов для запросов к BlogEntry

При первом запросе результаты кэшируются в кэш 2-го уровня, как и ожидалось.

Если я сейчас пойду и изменю строку в blog_entries, все будет работать как положено, кэш-память истек, появится следующее сообщение:

2010-03-03 12:56:50,583 [7] DEBUG NHibernate.Caches.SysCache2.SysCacheRegion - Cache items for region 'BlogEntriesCacheRegion' have been removed from the cache for the following reason : DependencyChanged

Я ожидаю этого.На следующем запросе страницы запрос и его результаты сохраняются обратно в кеш.Однако кэш-память немедленно снова становится недействительной, даже если больше ничего не изменилось.

DEBUG NHibernate.Caches.SysCache2.SysCacheRegion - Cache items for region 'BlogEntriesCacheRegion' have been removed from the cache for the following reason : DependencyChanged

Мой кэш-память постоянно аннулируется каждый раз без каких-либо изменений базовых данных.Только перезапуск приложения позволяет кешу снова работать - но только при первом кешировании данных (опять же, первое загрязнение кеша приводит к тому, что он больше никогда не работает)

Кто-нибудь видел эту проблемуили есть идеи, что это может быть?Я думал, что syscache2 должен обрабатывать событие SQLDependency onChange, которое он, вероятно, делает - поэтому я не понимаю, почему SQL Server продолжает отправлять SQLDependency dependencyChanged.

спасибо

1 Ответ

0 голосов
/ 29 марта 2010

Мы получаем ту же проблему на одном экземпляре базы данных, но не на другом. Это определенно кажется некоторой проблемой с разрешениями на стороне базы данных, потому что в обоих случаях используется одна и та же конфигурация NHibernate.

В рабочем случае кеш ведет себя как положено, в другом (который является механизмом базы данных с более строгими разрешениями) мы получаем то же поведение, которое вы упомянули.

...