sql-server-2005 - NHIbernate SysCache2 和 SQLDependency 问题

标签 sql-server-2005 nhibernate caching sqldependency syscache2

我在我的 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。

谢谢

最佳答案

我们在一个数据库实例上遇到了同样的问题,但在另一个数据库实例上却没有。这肯定是数据库端的某种权限问题,因为在这两种情况下使用完全相同的 NHibernate 配置。

在工作情况下,缓存的行为符合预期,在另一种情况下(这是一个具有更严格权限的数据库引擎),我们得到与您提到的完全相同的行为。

关于sql-server-2005 - NHIbernate SysCache2 和 SQLDependency 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375119/

相关文章:

c# - SQL 2005 随机连接超时/关于数据库超时的最佳实践

sql - 查询 View 是否比执行一次查询慢?

nhibernate - 使用 nhibernate 从数据库表中选择部分数据

http - 使用代理缓存昂贵的传出 HTTP 请求?

ASP.NET 对象缓存 - 多少才算太多?

sql-server - SQL Server - 由于 'ARITHABORT',插入失败

sql - 如何在 View 的计算列中强制执行 NOT NULL

c# - 如何在 NHibernate session 中保存两个相同的对象?

c# - 使用测试数据库集成测试链式 WCF 服务

javascript - Fusion Tables 查询速度