Допустим, я использую запрос, как показано ниже, чтобы получить большой набор результатов.
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 минуты или около того.
Итак, мне интересно, почему зависимость не была создана? Это потому, что я использую другой запрос для создания зависимости?