我在SQL Server 2008上设置了enable_broker以使用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
的查询启用了查询缓存当我第一次查询时,结果会按预期缓存在二级缓存中。
如果我现在去更改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。
感谢
答案 0 :(得分:0)
我们在一个数据库实例上遇到了同样的问题,但在另一个数据库实例上却没有。它似乎肯定是数据库端的某种权限问题,因为在两种情况下使用完全相同的NHibernate配置。
在工作的情况下,缓存的行为与预期的一样,在另一个(这是一个具有更严格权限的数据库引擎)中,我们得到了你提到的完全相同的行为。