3

DataCacheItemリストコレクションにキャストできないのは非常に奇妙です。

データベースから値を取得してキャッシュに保存していますが、キャッシュに 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>;

Objecttoをキャストできない理由がわかりませんList<T>。ここでのみ動作するようです。オブジェクトをJSONフォーマットでキャストし、キーでプルして作成しますList Object

更新 1:

このケースは、リストだけでなく、キャッシュから取得されたエンティティ オブジェクトにも当てはまります。

更新 2:

DTOでも動作しません。

これでまだ回避策を探しています。

4

2 に答える 2

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 に答える