Я установил 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>
Мой файл 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 depedencyChanged.
Спасибо