使用SqlCommand for cache-key时,SqlCacheDependency无法正常工作

时间:2012-01-09 15:02:13

标签: c# .net caching sqlcommand sqlcachedependency

此代码工作正常,无论何时在数据库中更改数据都会使数据无效:

    AggregateCacheDependency aggDep = new AggregateCacheDependency();

                System.Data.SqlClient.SqlCommand ocom = new System.Data.SqlClient.SqlCommand();
                SqlCacheDependency SqlDep = new SqlCacheDependency("DBNAMEINCONFIG", "Products");    
                aggDep.Add(SqlDep);

我不能在整个“产品”表上直接无效,但我需要能够使表上的选择无效。我遇到的问题是以下代码在数据更改时不会使缓存失效:

AggregateCacheDependency aggDep = new AggregateCacheDependency();

            System.Data.SqlClient.SqlCommand ocom = new System.Data.SqlClient.SqlCommand();
            ocom.CommandText = "SELECT ID,ClinicID,Price,Enabled FROM dbo.Products WHERE ClinicID = 1";
            ocom.Connection = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["DBSTRING"].ToString());
            SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);

            aggDep.Add(SqlDep);

我试图包含分析此内容所需的所有信息,但如果我要添加更多内容,请告诉我们。

2 个答案:

答案 0 :(得分:0)

根据概述here的规则,问题是您无法使用SELECT *进行查询。

以下更改应解决您的问题:

ocom.CommandText = "SELECT ClinicID FROM Products WHERE ClinicID = 1";

答案 1 :(得分:0)

正如 competent_tech 所指出,用于构建SqlCacheDependency的查询有很多规则。 根据这篇MSDN文章,最重要的是:

  1. 请勿在查询中使用SELECT *或table_name。*。
  2. 您必须使用完全限定的表名(例如dbo.Products)。
  3. 除了这些规则之外,执行用于构建SqlCommand的{​​{1}}以启用查询通知非常重要:

    SqlCacheDependency

    希望,这有帮助。