将数据保存到缓存并检索它

时间:2015-03-29 04:58:30

标签: c# caching asp.net-mvc-5

我一直在使用以下缓存类

Cache class

我的代码中有以下内容,首先是sql语句

SELECT Id, AmbitiousDescription from [User].[Ambitious_Description]

接下来是我将其读入列表时的部分

var ambition = sqlCon.Read().ToList();

然后我将它保存到缓存中,这样可以节省我多次访问数据库的时间。

Cache.CacheExtension.SaveTocache("ambition", ambition, new DateTime(1));

在这个方法的顶部,我检查它是否在缓存中,如下所示

 if (Cache.CacheExtension.IsIncache("ambition"))
 {
    var listAmbition = new SelectList(Cache.CacheExtension.GetFromCache("ambition"), "1", "AmbitiousDescription");
 }
 else
 {
   // otherwise get it from the database
 }

我目前在GetFromCache一词下面出现红色错误,该错误读取

enter image description here

我不是100%从缓存中检索它的语法,所以如果有人可以提供帮助,我会很感激。

更新

在Stephen的评论之后,我决定创建一个名为AmbitionDetails的类,如下所示:

 public class AmbitionDetails
{
    public int Id { get; set; }

    public string Description { get; set; }
}

然后通过执行以下操作填充此内容,首先我读取结果然后使用linq填充列表ambitionDetails

 // Read all the data from the query multiple
    var ambition = sqlCon.Read().ToList();

    var ambitionDetails = ambition.Select(item => new AmbitionDetails
    {
       Id = item.Id,
       Description = item.AmbitiousDescription
    }).ToList();

然后我将其保存在缓存中,如下所示:

Cache.CacheExtension.SaveTocache("ambition", ambitionDetails, new DateTime(1));

然后我尝试从缓存中检索它,如下所示:

var listAmbition = new SelectList(Cache.CacheExtension.GetFromCache<List<AmbitionDetails>>("ambition"));

            model.ListAmbitious = new List<SelectListItem>();

            model.ListAmbitious.AddRange(
                    listAmbition.Select(
                        item => new SelectListItem { Text = item.Text, Value = item.Value.ToString() }));

但是我在item =&gt;上得到一个null异常错误新的SelectListItem,但是当我在

上放置一个断点时
 var listAmbition;

并展开它以查看文本

的结果
"ApplicationName.Shared.Models.AmbitionDetails"

值为null

我不确定这里出了什么问题?

0 个答案:

没有答案