0

比方说,我使用下面的查询来获得大的结果集。我是否需要为我用来查询数据库的SqlCacheDependency指定相同的查询?

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

现在,我想缓存查询返回的每个对象,并在对象发生更改时使其无效。所以我投每个结果对上述结果设置为用户对象(DTO),然后同时加入他们缓存,加上依赖如下:

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分钟左右运行一次。

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

回答

0

查询必须相同。基本上,基于依赖关系使缓存无效的查询是应该用于获取数据的查询。

相关问题