缓存包含数据,但无法检索数据

时间:2010-09-28 18:40:25

标签: c# .net caching

这是我的一些代码:

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);
}

当我尝试从缓存中提取数据时,我的“sales”对象为null。想知道为什么代码被击中,我在VS中运行调试器以查看Cache对象中的内容。

缓存包含我需要的数据,但是当它从缓存中获取数据时,“sales”仍然是null。

我在这里做错了吗?

修改

我在施法时收到此错误:

  

[A] {System.Collections.Generic.List {1}} 1 [controls_mySales +销售]。类型A源自位于'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'的上下文'LoadNeither'中的'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089' 。类型B源自'mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'在上下文'LoadNeither'位置'C:\ WINDOWS \ assembly \ GAC_32 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'

3 个答案:

答案 0 :(得分:3)

as keyword上的MSDN页面指出:

  

as 运算符就像一个演员   除了它产生null   转换失败而非提升   例外。

看起来这就是这里发生的事情 - 类型List<Sale>的强制转换失败,并返回null。您确定这是缓存中对象的类型吗?

修改

为了回应您的编辑,似乎某些与binding contexts相关的与程序集相关的序列化/反序列化问题可能真的有点过头了。我查了一下,在这里发现了以下两个问题,这些问题可能会指向正确的方向:

Question 1
Question 2

希望这些链接有用。

答案 1 :(得分:0)

答案 2 :(得分:0)

显然有两个班级Sale

它看起来像是动态编译的Page或UserControl中的嵌套类。如果没有看到更多代码,很难准确理解发生了什么,但是当由于某种原因重新编译Page / UserControl时,它会得到一个新类型。

我将Sale类移到自己的源文件中的非嵌套类中。