SqlCacheDependency не работает при использовании SqlCommand для ключа кеша
Этот код работает нормально, он делает недействительными данные всякий раз, когда они изменяются в базе данных:
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 ответа
Проблема, согласно правилам, изложенным здесь, что вы не можете использовать SELECT *
для запроса.
Следующее изменение должно решить вашу проблему:
ocom.CommandText = "SELECT ClinicID FROM Products WHERE ClinicID = 1";
Как указывает компетентный_технологий, существует довольно много правил для запросов, используемых для построения SqlCacheDependency
, Согласно этой статье MSDN наиболее важными являются:
- Не используйте SELECT * или table_name.* В своих запросах.
- Вы должны использовать полные имена таблиц (например, dbo.Products).
Помимо этих правил важно выполнить SqlCommand
используется для создания SqlCacheDependency
чтобы включить уведомление о запросе:
using (SqlDataReader reader = ocom.ExecuteReader())
{
while (reader.Read())
{
}
}
SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);
aggDep.Add(SqlDep);
Надеюсь это поможет.