实体框架:值不能为空。参数名称:类型

问题描述 投票:0回答:10

当我执行

update-database
命令时,它显示了这个错误消息

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

at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
在 System.Activator.CreateInstance(Type 类型,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(字符串名称、布尔值强制、布尔值 ignoreChanges)
在 System.Data.Entity.Migrations.AddMigrationCommand.<>c__DisplayClass2.<.ctor>b__0()
在 System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)

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

entity-framework types null
10个回答
127
投票

对于那些使用 Visual Studio 2022 确实遇到此问题的人,至少有两个修复:

  • 切换回 Visual Studio 2019,因为如果您使用的是较旧的 Entity Framework 版本,它在 2022 版本中尚不可用。

  • 更新 Entity Framework 到 6.4.4 解决

Entity Framework 6 GitHub repository上的relevant issue file,项目成员ajcvickers评论于2021-11-18

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

虽然许多用户报告升级到 EF 6.4.4 解决了他们的问题,但问题仍然悬而未决,因为有些用户无法降级到 Visual Studio 2019 升级 Entity Framework,因为这些更改可能会破坏管道。


28
投票

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


12
投票

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

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

我将启动项目从

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


7
投票

当我添加迁移时,正好有这个错误消息(

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 异常会更精确一些。


3
投票

无需安装 VS 2019 的 VS 2022 替代解决方案是使用 Migrate.exe,here 它解释了如何使用它。它或多或少是这样的:

Migrate.exe your_app_ef_model.dll /startupConfigurationFile="your_app.config" /targetMigration="migrationName"

1
投票

我在 VS 2022 中的 MVC 5 中遇到了同样的错误,但是当我在 VS 2019 上运行它时。这修复了我的错误。


0
投票

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

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


0
投票

在我的例子中,问题是我的 IP 地址已经改变,目标数据库 - 在防火墙后面 - 不再接受来自我机器的连接。

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


0
投票

更新entityframework到6.4.4版本然后 使用 EntityFramework6\Add-Migration 命令,微软已经更改了 cmdmidlet 的名称

我的作品


0
投票

如果您在 Visual Studio 2022 中遇到此类错误实体框架:值不能为空。参数名称:类型

遵循以下步骤:-

第 1 步:- 将您的 EF 更新到版本 6.4.4

第 2 步:- 重新启动您的应用程序

第 3 步:- 运行迁移命令

对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.