Вопрос

Я пытаюсь аннулировать кэш на основе изменения в рядах базы данных. Я добился успеха, делая то же самое с 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 идеально подходит с той же базой данных и таблицей, поэтому нет никакого смысла в отношении сервисного брокера или других разрешений, не установленных. Пожалуйста, помогите мне избавиться от этой проблемы.

Это было полезно?

Решение

В этой статье есть некоторые шаги по устранению неполадок Таинственное уведомление, наряду с объяснением, как работают вещи, которые помогают, где пытаться понять, почему что -то сломано. Вы должны подтвердить, что каждый кусок механизма работает:

  • Проверьте уведомление о подписке создается в sys.dm_qn_subscriptions
  • Убедитесь, что уведомление получает уволенный
  • Убедитесь, что уведомление получает доставлен (Тем не менее, вы можете безопасно игнорировать все о маршрутизации и удаленной доставке в этой ссылке, поскольку SQLdePendency всегда локально)

На несвязанном примечании вы можете напрямую использовать уведомления LINQ-TO-SQL и запроса: Linqtocache.

Другие советы

Лучшее, что можно сделать: взглянуть на журнал SQL, если возникают какие -либо проблемы с уведомлениями, журнал покажет!

Журнал ошибок находится в программных файлах Microsoft SQL Server MSSQL.N MSSQL LOG ERRORLOG и ERRORLOG.N

В моем случае проблема возникла из -за восстановления базы данных, чтобы решить, журнал показал мне проблему, тогда я выполняю

use DatabaseName EXEC sp_changedbowner 'sa'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top