Нужно ли указывать тот же запрос для 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 минуты или около того.

Итак, мне интересно, почему зависимость не была создана? Это потому, что я использую другой запрос для создания зависимости?


person shashi    schedule 15.12.2011    source источник


Ответы (1)


Запрос должен быть таким же. По сути, запрос, который делает недействительным кеш на основе зависимости, должен использоваться для извлечения данных.

person shashi    schedule 24.04.2012