假设我使用如下查询来获得一个大的结果集。
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 分钟左右运行一次。
所以我想知道为什么没有创建依赖项?是因为我使用不同的查询来创建依赖项吗?