Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据保存到缓存并检索它_C#_Caching_Asp.net Mvc 5 - Fatal编程技术网

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

C# 将数据保存到缓存并检索它,c#,caching,asp.net-mvc-5,C#,Caching,Asp.net Mvc 5,我一直在使用下面的缓存类 我的代码中有以下内容,首先是sql语句 SELECT Id, AmbitiousDescription from [User].[Ambitious_Description] 接下来是我在列表中读到的部分 var ambition = sqlCon.Read().ToList(); 然后我将其保存到缓存中,这样就可以避免多次访问数据库 Cache.CacheExtension.SaveTocache("ambition", ambition, new DateTim

我一直在使用下面的缓存类

我的代码中有以下内容,首先是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这个词下面出现了一个红色错误,它读取

我不知道从缓存中检索它的语法是什么,所以如果有人能帮助我,我将不胜感激

更新

根据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() }));
并展开它以查看文本显示的结果

"ApplicationName.Shared.Models.AmbitionDetails"
并且该值为空


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

您需要对该值进行转换。您保存到缓存列表的类型是什么?@StephenMuecke我还没有给它一个类型,我目前使用的是var-agrimation=sqlCon.Read.ToList;GetFromCache方法正在返回T。SelectList`构造函数的第一个参数要求IEnumerable。您需要指定返回类型,例如GetFromCacheambition@StephenMuecke我无法将选择列表项保存在缓存中,因为这在过去导致了问题,也就是说,记住我相信我们在这个线程中提到的以前选择的值不,你不应该保存SelectList,但是你需要在列表中指定对象的类型,否则你的唯一返回类就是where T:class。您是否有一个名为野心的类型类,其属性Id和描述为?-或者某个具有int和string属性的基类,可以用来保存对象的属性?
"ApplicationName.Shared.Models.AmbitionDetails"