Azure缓存对象的类型转换始终为null

时间:2013-07-24 11:05:28

标签: c#-4.0 azure collections entity-framework-5 azure-caching

由于无法将DataCacheItem强制转换为列表集合而非常奇怪。

我从数据库中提取值并将其存储到Cache中但是如果我要求缓存使用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>;

我还没有找到为什么它无法将Object转换为List<T>。我似乎只是在这里工作,以JSON格式投射对象,按键拉动并创建List Object

  

更新1:

这种情况不仅包含List,还包含从Cache中检索的任何实体对象。

  

更新2:

也不与DTO合作。

仍然在寻找解决方案。

2 个答案:

答案 0 :(得分: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方法返回错误的类型。

答案 1 :(得分:2)

此代码片段将从Windows 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 CachingHow to: Use Windows Azure CachingBuilding Windows Azure Cloud Services with Cache Service