0

큰 결과 집합을 얻기 위해 아래와 같은 쿼리를 사용한다고 가정 해 보겠습니다.db를 쿼리하는 데 사용한 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 프로파일 러를 살펴보면 SqlQueryNotification 저장 프로 시저가 2 분마다 실행된다는 것을 알 수 있습니다.

그래서 종속성이 생성되지 않은 이유가 궁금합니다. 종속성을 생성하기 위해 다른 쿼리를 사용하고 있기 때문입니까?

답변

0

쿼리가 동일해야합니다. 기본적으로 종속성을 기반으로 캐시를 무효화하는 쿼리는 데이터를 가져 오는 데 사용해야하는 쿼리입니다.