SqlCacheDependency DependencyChanged事件不断触发

时间:2017-11-29 15:23:28

标签: c# sql asp.net

我正在尝试使用SqlCacheDependency来允许我在设置表中的某个键更改时使我的Web应用程序的应用程序缓存无效。对我来说,一切似乎都是正确的代码,注册依赖项时没有错误:

CacheItemRemovedCallback onCacheItemRemoved = new CacheItemRemovedCallback(CacheItemRemoved);

lock (_cacheLock)
{
    using (var connection = new SqlConnection(_connectionString))
    {  
        var command = new SqlCommand("SPNameHere", connection)
        {
            CommandType = CommandType.StoredProcedure
        };

        command.Parameters.AddWithValue("@Context", context.ToString());

        var dependency = new SqlCacheDependency(command);

        connection.Open();

        command.ExecuteNonQuery();

        HttpRuntime.Cache.Insert(GetKey(context), value, dependency, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(24), CacheItemPriority.Default, onCacheItemRemoved);
    }
}

我正在运行的SP是非常基本的(我甚至尝试过没有WHERE,但有同样的问题):

SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ON

SELECT
     Value
FROM 
     [dbo].[tb_SystemSettings]
 WHERE
    'SomePrefixText_' + @Context = Key

当我查看SQL事件探查器时,我可以看到有6个事件被提出。 5正在

  

3 - 订阅被解雇

最后一个是

  

1 - 已注册订阅

错误的事件文本包含:

  

ID =" 0"类型="订阅"源="声明"信息="无效" database_id的=" 0"

这表明SP存在问题,但我不能为我的生活找出问题所在。所有结果都是我对CacheItemRemoved的回调被不断调用,原因是DependencyChanged。我已经浏览了网页,看看问题可能是什么,但它们似乎都没有我在这里遇到的问题。

我有什么遗漏吗?任何帮助将不胜感激!

更新:

我尝试注册查询文本,而不是SP调用,我只获得了Subscription注册事件,但是一行上的运行和UPDATE花了近2分钟(表中只有6行),并且分析器显示改变事件不断发射。什么可能导致这个?桌子上没有触发器或类似的东西。

0 个答案:

没有答案