SqlCacheDependency не работает при использовании SqlCommand для ключа кеша - PullRequest
0 голосов
/ 09 января 2012

Этот код работает нормально, он делает недействительными данные всякий раз, когда они изменяются в базе данных:

    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 голосов
/ 10 января 2012

Как указывало tims_tech , существует довольно много правил для запросов, используемых для построения SqlCacheDependency.Согласно этой статье MSDN наиболее важными являются:

  1. Не используйте SELECT * или имя_таблицы. * В своих запросах.
  2. Вы должны использовать полностью определенную таблицуимена (например, dbo.Products).

Помимо этих правил важно выполнить SqlCommand, используемый для построения SqlCacheDependency, чтобы включить уведомление запроса:

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

SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);

aggDep.Add(SqlDep);

Надеюсь, это поможет.

0 голосов
/ 09 января 2012

Проблема в том, что согласно правилам, указанным здесь , вы не можете использовать SELECT * для запроса.

Следующее изменение должно решить вашу проблему:

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