0

このコードは正常に機能し、データベースで変更されるたびにデータを無効にします。

    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);

これを分析するために必要なすべての情報を含めようとしましたが、さらに含める必要がある場合はお知らせください。

4

2 に答える 2

0

Company_techが指摘したように、ビルドに使用されるクエリにはかなりの数のルールがありますSqlCacheDependency。このMSDNの記事によると、最も重要なものは次のとおりです。

  1. クエリで SELECT * または table_name.* を使用しないでください。
  2. 完全修飾テーブル名 (dbo.Products など) を使用する必要があります。

これらのルールに加えて、クエリ通知を有効にするためにSqlCommand使用される を実行して を構築することが重要です。SqlCacheDependency

using (SqlDataReader reader = ocom.ExecuteReader())
{
  while (reader.Read())
  {           
  }
} 

SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);

aggDep.Add(SqlDep);

お役に立てれば。

于 2012-01-09T20:13:28.717 に答える
0

問題は、ここで概説されている規則によるとSELECT *、クエリに使用できないことです。

次の変更により、問題が解決するはずです。

ocom.CommandText = "SELECT ClinicID FROM Products WHERE ClinicID = 1";
于 2012-01-09T17:40:25.177 に答える