我是否需要为SqlCacheDependency指定相同的查询,我用它来查询数据库?

时间:2011-12-15 09:19:49

标签: asp.net sql-server-2005 sqldependency sqlcachedependency

假设我使用下面的查询来获取大的结果集。

Select UserID,FirstName, LastName, City, Age from UserInfo where DateDiff(d,GetDate,LastActiveOn)  > 180

现在,我希望缓存查询返回的每个对象,并在对象发生更改时使其无效。因此,我将上述结果集的每个结果转换为User对象(DTO),然后在添加Cache时添加依赖项,如下所示:

   while (reader.Read())
                {
                    var user = new UserInfo(reader, false);
                    float distance;
                    if (float.TryParse(reader["Distance"].ToString(), out distance))
                    {
                        user.Distance = distance;
                    }
                    //Add user to Cache
                    string userQuery = "SELECT UserID,FirstName,MiddleName,LastName FROM mydb.dbo.UserInfo where UserID=" + user.UserId.ToString();
                    var cacheDependencyCmd = new SqlCommand(userQuery, con);
                    SqlCacheDependency jobSeekerDependency = new SqlCacheDependency(cacheDependencyCmd);
                TimeSpan timeLeftToExpiration = user.LastActive.AddDays(180) - DateTime.Now;

                DateTime itemExpirationDate = DateTime.Now.AddDays(timeLeftToExpiration.Days);


                string key = "u-" + user.UserId.ToString();
                this.Context.Cache.Insert(key,user.UserId.ToString() + user.LastActiveString , jobSeekerDependency, itemExpirationDate, Cache.NoSlidingExpiration, CacheItemPriority.Normal, new CacheItemRemovedCallback(ItemRemovedCallBack));

但这似乎不起作用。 sys.dm_qn_subscriptions中没有记录。事件日志中没有更多错误(我昨天得到了它并采取了适当的步骤来解决这些错误)查看Sql Profiler我发现SqlQueryNotification存储过程每2分钟左右运行一次。

所以我想知道为什么没有创建依赖?是因为我使用不同的查询来创建依赖项吗?

1 个答案:

答案 0 :(得分:0)

查询必须相同。基本上,基于依赖性使高速缓存失效的查询是应该用于获取数据的查询。