none
sqlcachedependency的haschanged属性,在执行完数据查询之后,总是为true RRS feed

  • 问题

  • 刚刚开始学习使用sqlcachedependency ,在开启mssql数据库缓存依赖之后,用一个webform页面写个测试,发现不起作用,不知道错在哪里。每次在执行完数据查询之后 依赖项的属性就已经通知我更改了。图中的OnRemove回调方法 就在数据查询执行完毕之后 立马就调用了。求指方向。

    配置文件如下:

    <configuration>
      <connectionStrings>
        <add name="TestConnectionString" connectionString="Data Source=.;Initial Catalog=EPlatformTemp;Persist Security Info=True;User ID=sa;Password=server" providerName="System.Data.SqlClient"/>
      </connectionStrings>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
        <caching>
          <sqlCacheDependency enabled="true" pollTime="10000">
            <databases>
              <add name="EPlatformTemp" connectionStringName="TestConnectionString" pollTime="10000"/>
            </databases>
          </sqlCacheDependency>
        </caching>
      </system.web>
    </configuration>

    代码如下:

    2013年10月18日 3:12

全部回复

  • Global里面有写:

            protected void Application_Start(object sender, EventArgs e)
            {
                DbHelper.DbConnectionString =
                    ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;
                DbHelper.DbProviderName = ConfigurationManager.ConnectionStrings["TestConnectionString"].ProviderName;
                SqlDependency.Start(ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString);
            }

            protected void Application_End(object sender, EventArgs e)
            {
                SqlDependency.Stop(ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString);
            }

    2013年10月18日 3:15
  • 数据库的 clr enabled 也设置了 1

    对应数据库 EPlatformTemp也设置了 is_broker_enabled=1

    2013年10月18日 3:17
  • 找了很多解决办法,都说的差不多,大都是将配置问题,但是我敢肯定配置没有问题,因为我现在通过使用另外一个实例化 SqlCacheDependency的方法 

        public sealed class SqlCacheDependency: CacheDependency
        {
            public SqlCacheDependency(SqlCommand sqlCmd);        
            public SqlCacheDependency(string databaseEntryName, string tableName);
            public static CacheDependency CreateOutputCacheDependency(string dependency);
            protected override void DependencyDispose();
            public override string GetUniqueID();
        }

    使用第二个:var sqlCacheDependency = new SqlCacheDependency("EPlatformTemp","CSEEClass");

    确实能够正确运行了,我实验了,在不跟新数据的情况下,缓存正常,更新数据 稍等一会之后,回调函数会被调用,然后缓存清除掉了,再刷新页面,就又是新的缓存了。这是为什么,难道是我的sql查询语句构造的Command对象 不符合SqlCacheDependency实例化要求吗?

    2013年10月18日 3:34