由于无法将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合作。
仍然在寻找解决方案。
答案 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 Caching,How to: Use Windows Azure Caching和Building Windows Azure Cloud Services with Cache Service。