Кэш содержит данные, но не может получить данные - PullRequest
2 голосов
/ 28 сентября 2010

Вот мой кусочек кода:

List<Sale> sales = new List<Sale>();

if (Cache["Sales"] != null)
{
    sales = (List<Sale>)Cache["Sales"];
}
else
{
    ...
    Cache.Add("Sales", sales, null, DateTime.Now.AddMinutes(20),
        Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
}

Когда я пытаюсь извлечь данные из кэша, мой объект "продажи" имеет значение null.Удивляясь, почему этот код используется вообще, я запустил отладчик в VS, чтобы посмотреть, что находится в объекте Cache.

Кэш содержит данные, которые мне нужны, но когда он получает данные из кэша, «продажи»все еще выходит как ноль.

Есть ли что-то, что я делаю здесь неправильно?

РЕДАКТИРОВАТЬ:

Я получаю эту ошибку при приведении:

[A] System.Collections.Generic.List 1[controls_mySales+Sale] cannot be cast to [B]System.Collections.Generic.List 1 [controls_mySales + Sale].Тип A происходит от «mscorlib, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089» в контексте «LoadNeither» в расположении «C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll»,Тип B происходит от «mscorlib, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089» в контексте «LoadNeither» в расположении «C: \ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll»

Ответы [ 3 ]

3 голосов
/ 28 сентября 2010
Страница

MSDN по ключевому слову as гласит:

Оператор as подобен приведению кроме того, что это дает ноль на ошибка преобразования вместо повышения исключение.

Похоже, это то, что здесь происходит - приведение к типу List<Sale> не выполнено, и возвращается null. Вы уверены, что это тип объекта в вашем кэше?

EDIT:

В ответ на ваше редактирование, похоже, возникает какая-то проблема, связанная с сериализацией / десериализацией сборки, связанная с контекстами связывания , что, честно говоря, немного над моей головой. Я проверил и нашел следующие два вопроса на SO, которые могут указать вам правильное направление:

Вопрос 1
Вопрос 2

Надеюсь, эти ссылки окажутся полезными.

0 голосов
/ 21 сентября 2012

Очевидно, есть два класса Sale.

Это похоже на вложенный класс в динамически скомпилированном Page или UserControl.Трудно точно понять, что происходит, не видя больше кода, но, возможно, когда по какой-то причине Page / UserControl перекомпилируется, он получает новый тип.

Я бы переместил класс Sale в свой собственный.не вложенный класс в своем собственном исходном файле.

0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...