简单的SqlCacheDependency

Par*_*roX 5 c# sql-server asp.net sqlcachedependency sql-server-2012

我阅读的几乎每个教程似乎都错误地设置了SqlCacheDependency。我相信他们通常会将过时的轮询方法与查询通知方法混合在一起。

这是许多示例中的两个:


根据我的测试,如果您正在使用代理(MSSQL 2015+),则无需进行任何.config更改,也不需要进行任何SqlCacheDependencyAdmin调用(无需定义表等)。

我简化只是做...

SqlDependency.Start(connString)
...
queryString = "SELECT ...";
cacheName = "SqlCache" + queryString.GetHashCode();
...
using (var connection = new SqlConnection(connString))
{
    connection.Open();
    var cmd = new SqlCommand(queryString, connection)
    {
        Notification = null, 
        NotificationAutoEnlist = true
    };

    var dependency = new SqlCacheDependency(cmd);

    SqlDataReader reader = cmd.ExecuteReader();
    try
    {
        while (reader.Read())
        {
            // Set the result you want to cache
            data = ...
        }
    }
    finally
    {
        reader.Close();
    }

    HostingEnvironment.Cache.Insert(cacheName, data, dependency);
}
Run Code Online (Sandbox Code Playgroud)

(不包括检查缓存是否为空的代码,因为这只是设置。我只想显示缓存的设置)

这似乎有效,无需定义查询中涉及哪些表并在每个表上进行复杂的触发器。它只是工作。

更令我惊讶的是,进行查询的规则具有通知功能:

  • 创建通知通知查询(找不到2008年以后的文档)似乎不适用。我打算在我的SQL中做一个TOP,它仍然有效。

为了进行测试,我让它运行一个查询1000次,涉及一个名为“ Settings”的表。然后,我更新表中的值并重复查询。

我在探查器中查看了涉及“设置”一词的所有查询,并且看到查询只执行了1次(以设置缓存),然后发生了更新语句,然后又重新执行了一次查询(缓存)无效,查询再次运行)

我担心,在2-3个小时的努力中,我会丢失一些东西,这真的很简单吗?

我真的可以只输入我想要的任何查询,它就可以工作吗?我正在寻找做危险/非标准或我缺少的小字样的任何指针