3

List Collection에 DataCacheItem을 전송할 수 없으므로 매우 이상합니다.Azure 캐시 객체의 Typecasting은 항상 null입니다.

데이터베이스에서 값을 가져 와서 캐시에 저장하지만 캐시에서 TypeCast로 데이터를 반환하도록 요청한 경우 캐시가이를 거부합니다.

Cannot cast 'isValueInCache' (which has an actual type of  
'Microsoft.ApplicationServer.Caching.DataCacheItem') to  
'System.Collections.Generic.List<MMD.Data.HumanGender>' 


//Setting Value in Cache Object 
var isValueInCache = BaseCache.Instance().RetrieveCacheValue("allGenders"); 

//TypeCasting of Data 
var isSeariled = isValueInCache == null ? 
Newtonsoft.Json.JsonConvert.DeserializeObject(proxy.GetAllGenders(), 
typeof(List<HumanGender>)) as List<HumanGender> 
: isValueInCache as List<HumanGender>; 

내가 그것을 할 수없는 List<T>Object 캐스팅 이유를 발견하지 않았습니다. 여기서는 내가 일하는 것처럼 보입니다. 캐스트 객체는 JSON 형식이고, 키로 당겨서 List Object을 만듭니다.

업데이트 1 :

이 경우는뿐만 아니라 목록 함께뿐만 아니라 캐시 양식을 만회하는 모든 엔티티 객체.

업데이트 2 :

는 DTO와 함께 작동하지 않는다.

아직도이 문제를 해결하고 있습니다.

답변

2

datacache 항목의 value 속성을 사용하지 않아야합니까?

현재 Visual Studio 뒤에 있지 않으므로 컴파일러없이이 문서를 작성하고 있습니다.

var isValueInCache = BaseCache.Instance().RetrieveCacheValue("allGenders") as DataCacheItem; 

//TypeCasting of Data 
var isSeariled = isValueInCache == null ? 
Newtonsoft.Json.JsonConvert.DeserializeObject(proxy.GetAllGenders(), 
typeof(List<HumanGender>)) as List<HumanGender> 
: isValueInCache.Value as List<HumanGender>; 

편집 :

나는 당신의 BaseCache의 RetrieveCacheValue 방법이 잘못된 형식을 반환 생각합니다.

+0

기술적으로 'RetrieveCacheValue'는 객체를 반환하고 value 속성은 객체를 반환합니다. 그래서 그것의 동일한 가치. – joshua

+0

에 동의합니다. 이에 대한 Microsoft의 설명서는 부적절합니다. – joshua

2

이 코드는이있을 경우 윈도우 Azure 캐시에서 개체를 검색하고 현재 아니라면 캐시에 저장됩니다

DataCacheFactory cacheFactory = new DataCacheFactory(); 
cache = cacheFactory.GetCache("MyCache"); 
List<HumanGender> humanGenderList = cache.Get("allGenders") as List<HumanGender>; 
if (humanGenderList == null) 
{ 
    // "allGenders" not in cache. Obtain it from specified data source and add it. 
    humanGenderList = Newtonsoft.Json.JsonConvert.DeserializeObject(proxy.GetAllGenders(), 
     typeof(List<HumanGender>)) as List<HumanGender>; 
    cache.Put("allGenders", humanGenderList); 
} 

자세한 내용은 How to Use Windows Azure Caching, How to: Use Windows Azure CachingBuilding Windows Azure Cloud Services with Cache Service를 참조하십시오.

관련 문제