【问题标题】:Entity Framework : Value cannot be null. Parameter name: type实体框架:值不能为空。参数名称:类型
【发布时间】:2017-06-06 06:21:57
【问题描述】:

当我执行update-database 命令时,它会显示此错误消息

System.ArgumentNullException:值不能为空。
参数名称:类型

在 System.Activator.CreateInstance(类型类型、BindingFlags bindingAttr、Binder binder、Object[] args、CultureInfo 文化、Object[] activationAttributes)
在 System.Activator.CreateInstance(类型类型,Object[] args)
在 System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(项目项目,Int32 shellVersion)
在 System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebSiteProject(项目项目)
在 System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetTargetDir(项目项目)
在 System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(字符串配置类型名称,布尔值 useContextWorkingDirectory)
在 System.Data.Entity.Migrations.AddMigrationCommand.Execute(字符串名称,布尔力,布尔忽略更改)
在 System.Data.Entity.Migrations.AddMigrationCommand.c__DisplayClass2.<.ctor>b__0()
在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)

值不能为空。
参数名称:type”?

【问题讨论】:

    标签: entity-framework types null


    【解决方案1】:

    对于在使用 Visual Studio 2022 时确实遇到此问题的用户:切换回 Visual Studio 2019,因为当您使用较旧的 Entity Framework 版本时,它在 2022 版本中尚无法使用。

    relevant issue file on the Entity Framework 6 GitHub repository,项目成员ajcvickers commented on 2021-11-18

    [...] EF 6.2 不起作用。您将需要更新到 EF 6.4.4。到目前为止,我们无法使用 EF 6.4.4 重现这一点。

    虽然许多用户报告升级到 EF 6.4.4 可以解决他们的问题,但问题仍然存在,因为有些用户无法降级到 Visual Studio 2019升级实体框架,因为这些更改可能会破坏管道。

    【讨论】:

    • 我将 ef 6.2 升级到 6.4,我的问题解决了。谢谢!
    • Arthur Vickers 不是“项目成员”...他是 Microsoft 实体框架团队的首席软件工程经理。 ?
    【解决方案2】:

    我在 VS 2022 中遇到此错误,而我使用的是 EF 版本 6.1.3。我将 EF 升级到 6.4.4 版本,问题得到解决。 .Net 版本是 4.8。

    【讨论】:

    • 这重复了一个月前 Apfelkuacha 的回答。
    【解决方案3】:

    在我的情况下,问题是我的 IP 地址已更改,并且目标数据库(位于防火墙后面)不再接受来自我的计算机的连接。

    对于这种类型的问题,解决方案是更改防火墙设置或修复任何其他连接问题。

    【讨论】:

      【解决方案4】:

      当 Migrations 文件夹中的 ApplicationDbContextModelSnapshot 文件不再匹配实体关系时,最常出现此问题。

      也许删除此文件并运行迁移可以解决问题。无论如何,在执行 add-migration 命令时会再次创建此文件。

      【讨论】:

      • 请注意,此答案特别适用于 EntityFramework Core。 EntityFramework 没有这样的快照文件。
      【解决方案5】:

      当我添加迁移时,正好有这个错误消息 (Value cannot be null. (Parameter 'type'))。尝试了其他解决方案(重新启动 VS),但没有奏效。

      经过长时间的搜索,我找到了问题的根源。 在我的一个 POCO 中设置“InverseProperty”注释时出错:

      public class Workflow{
       [InverseProperty("Workflow")]
       public List<Node> Nodes { get; set; } 
       ...
      }
      public class Node{
       public int WorkflowId{ get; set; } 
       public Workflow Workflow{ get; set; } 
       ...
      }
      

      而不是

      public class Workflow{
       [InverseProperty("WorkflowId")] //needs to be Workflow instead of WorkflowId
       public List<Node> Nodes { get; set; } 
       ...
      }
      

      我希望 EF 异常能更精确一点。

      【讨论】:

        【解决方案6】:

        解决方案:对我来说,解决方案就像重启 Visual Studio 一样简单。

        Senario:我有这样的解决方案:

        我将启动项目从 Host 更改为包含 web.config 的 UI.Web 项目,然后运行 ​​update-database 命令,但它给了我 Value cannot be null. 异常,直到我重新启动 Visual Studio 并重新运行 update-database命令。这次它表现正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-26
          • 1970-01-01
          • 1970-01-01
          • 2019-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多