Asp.net mvc 3 从Memcached(.NET)获取数据时出现NullReferenceException
从.NET MVC解决方案上的Memcached获取数据时出现问题 我有一个自定义存储库:Asp.net mvc 3 从Memcached(.NET)获取数据时出现NullReferenceException,asp.net-mvc-3,memcached,enyim,Asp.net Mvc 3,Memcached,Enyim,从.NET MVC解决方案上的Memcached获取数据时出现问题 我有一个自定义存储库: public List<DropDownLocalization> GetLocalization(string key, string lang) { var result = cacheClient.Get<IQueryable<DropDownLocalization>>("DD_" + key + "_" + lang);
public List<DropDownLocalization> GetLocalization(string key, string lang)
{
var result = cacheClient.Get<IQueryable<DropDownLocalization>>("DD_" + key + "_" + lang);
if (result == null)
{
int getLangId = _db.languages.Where(d => d.Association == lang).Select(d => d.Id).FirstOrDefault();
int getLableItemId = _db.lables_dropdown.Where(d => d.Key == key).Select(d => d.Id).FirstOrDefault();
var get = _db.lables_dropdown_items.Where(d => d.LableId == getLableItemId).Select(d => new DropDownLocalization
{
DDId = d.Id,
DDName = d.lables_dropdown_values.Where(m => m.Language == getLangId).Select(m => m.Value).FirstOrDefault()
}).AsQueryable();
cacheClient.Store(StoreMode.Add, "DD_" + key + "_" + lang, (IQueryable<DropDownLocalization>)get);
EFQueryLogger.WriteQuery(((ObjectQuery)get).ToTraceString());
return get.ToList();
}
return result.ToList();
}
public List GetLocalization(字符串键、字符串lang)
{
var result=cacheClient.Get(“DD_”+key+“_”+lang);
如果(结果==null)
{
int getLangId=_db.languages.Where(d=>d.Association==lang).Select(d=>d.Id.FirstOrDefault();
int getLableItemId=\u db.lables\u下拉列表。其中(d=>d.Key==Key)。选择(d=>d.Id)。FirstOrDefault();
var get=\u db.lables\u dropdown\u items.Where(d=>d.LableId==getLableItemId)。选择(d=>newdropdownLocalization
{
DDId=d.Id,
DDName=d.lables\u dropdown\u values.Where(m=>m.Language==getLangId).选择(m=>m.Value).FirstOrDefault()
}).AsQueryable();
cacheClient.Store(StoreMode.Add,“DD_”+key+“_”+lang,(IQueryable)get);
WriteQuery(((ObjectQuery)get.ToTraceString());
返回get.ToList();
}
返回result.ToList();
}
这是从当前语言中本地化的下拉标签列表
所以它试图从缓存中获取数据,如果不成功,就将数据放入缓存。当我用“if”语句注释代码的一部分时(只是为了看看它是否是从缓存中获取数据),我有一个空引用错误。这意味着请求-响应不在缓存中
有人能帮我解决这个问题吗
这是我的enym客户端库配置:
<enyim.com>
<memcached protocol="Text">
<servers>
<add address="localhost" port="11211" />
</servers>
<socketPool deadTimeout="00:00:10" />
</memcached>
</enyim.com>
找到解决方案。不幸的是,这是我的错误。这里有一个如何在memcached中存储数据模型的实践 我有一个模型:
[Serializable]
public class DropDownLocalization
{
public int DDId { get; set; }
public string DDName { get; set; }
}
以及返回结果的方法:
public List<DropDownLocalization> GetLocalization(string key, string lang)
{
List<DropDownLocalization> result = MemcachedSingleton.Instance.Get<List<DropDownLocalization>>("DD_" + key + "_" + lang);
if (result == null)
{
int getLangId = _db.languages.Where(d => d.Association == lang).Select(d => d.Id).FirstOrDefault();
int getLableItemId = _db.lables_dropdown.Where(d => d.Key == key).Select(d => d.Id).FirstOrDefault();
result = _db.lables_dropdown_items.Where(d => d.LableId == getLableItemId).Select(d => new DropDownLocalization
{
DDId = d.Id,
DDName = d.lables_dropdown_values.Where(m => m.Language == getLangId).Select(m => m.Value).FirstOrDefault()
}).ToList();
MemcachedSingleton.Instance.Store(StoreMode.Add, "DD_" + key + "_" + lang, result);
return result;
}
return result;
}
public List GetLocalization(字符串键、字符串lang)
{
List result=MemcachedSingleton.Instance.Get(“DD_“+key+”“+lang);
如果(结果==null)
{
int getLangId=_db.languages.Where(d=>d.Association==lang).Select(d=>d.Id.FirstOrDefault();
int getLableItemId=\u db.lables\u下拉列表。其中(d=>d.Key==Key)。选择(d=>d.Id)。FirstOrDefault();
result=\u db.lables\u dropdown\u items.Where(d=>d.LableId==getLableItemId)。选择(d=>newdropdownLocalization
{
DDId=d.Id,
DDName=d.lables\u dropdown\u values.Where(m=>m.Language==getLangId).选择(m=>m.Value).FirstOrDefault()
}).ToList();
MemcachedSingleton.Instance.Store(StoreMode.Add,“DD_“+key+““+lang,result);
返回结果;
}
返回结果;
}
它现在完全起作用了
配置应该是下一个:
<enyim.com>
<memcached protocol="Text">
<servers>
<add address="localhost" port="11211" />
</servers>
<transcoder type="Enyim.Caching.Memcached.DataContractTranscoder, Enyim.Caching" />
<socketPool deadTimeout="00:00:10" />
</memcached>
</enyim.com>
- 请打印您的映射和实体
- 是否启用LazyLoad和ProxyGeneration
- 您是否从多个AppDomain测试过它