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