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

查詢必須相同。基本上,基於依賴關係使緩存無效的查詢是應該用於獲取數據的查詢。

相關問題