Нужно ли указывать тот же запрос для SqlCacheDependency, который я использовал для запроса БД? - PullRequest
0 голосов
/ 15 декабря 2011

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

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_subscription нет записей. В журнале событий больше нет ошибок (которые я получал вчера и предпринял соответствующие шаги для их устранения). Глядя на Sql Profiler, я обнаружил, что хранимая процедура SqlQueryNotification выполняется каждые 2 минуты или около того.

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

1 Ответ

0 голосов
/ 24 апреля 2012

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

...