Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Asp.net mvc 3 从Memcached(.NET)获取数据时出现NullReferenceException_Asp.net Mvc 3_Memcached_Enyim - Fatal编程技术网

Asp.net mvc 3 从Memcached(.NET)获取数据时出现NullReferenceException

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

从.NET MVC解决方案上的Memcached获取数据时出现问题

我有一个自定义存储库:

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测试过它
测试用例:
  • AppDomain“A”添加到memcached序列化EF 4.1代码的第一个实体“e1”(来自“A”范围的动态代理类型)
  • AppDomain“B”从memcached实体“e1”获取并尝试对其进行理想化
  • 资产例外

    Could not load file or assembly 'EntityFrameworkDynamicProxies-***.DomainModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 无法加载文件或程序集 'EntityFrameworkDynamicProxy-***.DomainModel, 版本=1.0.0.0,区域性=中性,PublicKeyToken=空' 或者它的一个依赖项。系统找不到指定的文件。