Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如果存在Cache.insert,则添加迁移或更新数据库失败_C#_Entity Framework_Asp.net Mvc 4_Entity Framework Migrations - Fatal编程技术网

C# 如果存在Cache.insert,则添加迁移或更新数据库失败

C# 如果存在Cache.insert,则添加迁移或更新数据库失败,c#,entity-framework,asp.net-mvc-4,entity-framework-migrations,C#,Entity Framework,Asp.net Mvc 4,Entity Framework Migrations,我正在尝试运行添加迁移命令并出现以下错误: PM> add-migration LatestModel System.NullReferenceException: Object reference not set to an instance of an object. 在这一行代码中出现错误: public static string WebText(string key) { //Is value in cache? string outp

我正在尝试运行添加迁移命令并出现以下错误:

PM> add-migration LatestModel
System.NullReferenceException: Object reference not set to an instance of an object.
在这一行代码中出现错误:

 public static string WebText(string key)
    {
        //Is value in cache?
        string outputValue;
        if (!CacheHelper.Get(key, out outputValue))
        {
            var str = StringsService.GetResource(value);

           HttpContext.Current.Cache.Insert(
           key,
           outputValue,
           null,
           System.Web.Caching.Cache.NoAbsoluteExpiration,
           TimeSpan.FromMinutes(60));

            return str;

        }

        return outputValue;
    }
现在,函数WebText只是从数据库表中获取一个值,但是,我不明白entity framework为什么要尝试对HttpContect行进行脚手架构建或执行任何操作

抛出错误

System.NullReferenceException: Object reference not set to an instance of an object.
at PL_AnnexA_Application.Models.Helpers.WebtextHelpers.WebText(String key) in
Helpers.cs:line 36   
at System.ComponentModel.DisplayNameAttribute.GetHashCode()
at System.Collections.Generic.ObjectEqualityComparer`1.GetHashCode(T obj)
at System.Linq.Set`1.InternalGetHashCode(TElement value)
at System.Linq.Set`1.Find(TElement value, Boolean add)
at System.Linq.Enumerable.<ExceptIterator>d__99`1.MoveNext()
at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext()
Line 36 is

HttpContext.Current.Cache.Insert(
System.NullReferenceException:对象引用未设置为对象的实例。
在PL_AnnexA_Application.Models.Helpers.WebtextHelpers.WebText(字符串键)中
助手:第36行
位于System.ComponentModel.DisplayNameAttribute.GetHashCode()处
位于System.Collections.Generic.ObjectEqualityComparer`1.GetHashCode(T obj)
在System.Linq.Set`1.InternalGetHashCode处(远程登录值)
在System.Linq.Set`1.Find处(远程输入值,布尔加法)
在System.Linq.Enumerable.d_u99`1.MoveNext()中
在System.Linq.Enumerable.d_uaa`1.MoveNext()中
第36行是
HttpContext.Current.Cache.Insert(

有什么想法吗?

看起来您正在重写GetHashCode()方法,并在其中调用您的WebText方法。在执行迁移时,EF可能在内部某个位置使用哈希代码。是的,您当前的http上下文此时将为空,因为它可能在全局asax中的应用程序启动时执行

一种解决方案是删除对GetHashCode的覆盖,并在其他地方解决它的必要性


GetHashCode出现在stacktrace中。

由于我确实需要缓存功能和displaytext覆盖,我意识到只要检查HttpContect.Current在缓存例程中是否不为null就可以了。我谴责今天的15小时编码。感谢Anshul提供的指针。

您共享的代码看起来不像db模型,可以吗ou过去的确切错误。因为它不是一个DB模型,它是一个执行函数的类。这可能是因为您的HTTPContext值为null,所以当您编写cmd add migration时,没有HTTPContext。您试图在这里实现的是什么我添加了一个函数,该函数根据缓存中的项目的存在来获取或添加项目,它位于bog标准类。我只是尝试创建一个迁移文件并更新数据库,以应对其他实际发生的模型更改。在我添加此缓存进程之前,这一切都很顺利。因此,如果我的理解正确,在我运行“添加迁移”或“更新数据库”时,HttpContext必须存在?好的,我想我知道这里发生了什么。我有e另一个覆盖DisplayName属性并从函数WebText获取数据的函数: