Я пытаюсь сделать кеш недействительным на основании изменения в строках базы данных. Я добился успеха, выполнив то же самое с linq с той же базой данных и таблицей, но я не смог сделать это в основном:
Вот код, который я написал, пожалуйста, помогите:
public DataSet GetData(string sqlCmd)
{
string connectionStr = System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
string cacheKey = "test123";
DataSet ds = (DataSet)HttpRuntime.Cache.Get(cacheKey);
if (ds != null)
{
return ds;
}
SqlCacheDependency sqldep = null;
SqlConnection conn = new SqlConnection(connectionStr);
SqlCommand cmd = new SqlCommand(sqlCmd, conn);
cmd.Notification = null;
cmd.NotificationAutoEnlist = true;
SqlDataAdapter sqlAd = new SqlDataAdapter(cmd);
ds = new DataSet();
sqlAd.Fill(ds);
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(connectionStr);
string NotificationTable = "TblMetaData";
if (!System.Web.Caching.SqlCacheDependencyAdmin.GetTablesEnabledForNotifications(connectionStr).Contains(NotificationTable))
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(connectionStr, NotificationTable);
sqldep = new SqlCacheDependency(cmd);
HttpRuntime.Cache.Insert(cacheKey, ds, sqldep);
return ds;
}
Я использую Sql Server 2005 и использую полные запросы, которые могут работать с командными уведомлениями.
Мой другой код в Linq отлично работает с той же базой данных и таблицей, поэтому нет никакого смысла в том, что компонент Service Broker или другие права доступа не установлены. Пожалуйста, помогите мне избавиться от этой проблемы.