3

这很奇怪,因为无法将 aDataCacheItem转换为 List Collection。

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

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

更新1:

这种情况不仅包括列表,还包括从缓存中检索到的任何实体对象。

更新 2:

也不使用 DTO。

仍在寻找解决方法。

4

2 回答 2

2

您不应该使用数据缓存项的 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 方法返回错误的类型。

于 2013-07-26T12:54:25.407 回答
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);
}

有关详细信息,请参阅如何使用 Windows Azure 缓存如何:使用 Windows Azure 缓存使用缓存服务构建 Windows Azure 云服务

于 2013-07-26T15:44:08.403 回答