当我执行
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"?
对于那些使用 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,因为这些更改可能会破坏管道。
我在 VS 2022 中遇到此错误,当时我使用的是 EF 版本 6.1.3。我将 EF 升级到版本 6.4.4,问题得到解决。 .Net 版本是 4.8.
当我添加迁移时,正好有这个错误消息(
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 异常会更精确一些。
无需安装 VS 2019 的 VS 2022 替代解决方案是使用 Migrate.exe,here 它解释了如何使用它。它或多或少是这样的:
Migrate.exe your_app_ef_model.dll /startupConfigurationFile="your_app.config" /targetMigration="migrationName"
我在 VS 2022 中的 MVC 5 中遇到了同样的错误,但是当我在 VS 2019 上运行它时。这修复了我的错误。
当 Migrations 文件夹中的 ApplicationDbContextModelSnapshot 文件不再匹配实体关系时,最常出现此问题。
也许删除这个文件并运行迁移可以解决问题。无论如何,执行添加迁移命令时会再次创建此文件。
在我的例子中,问题是我的 IP 地址已经改变,目标数据库 - 在防火墙后面 - 不再接受来自我机器的连接。
对于这种问题,解决方案是更改防火墙设置或修复任何其他连接问题。
更新entityframework到6.4.4版本然后 使用 EntityFramework6\Add-Migration 命令,微软已经更改了 cmdmidlet 的名称
我的作品
如果您在 Visual Studio 2022 中遇到此类错误实体框架:值不能为空。参数名称:类型
遵循以下步骤:-
第 1 步:- 将您的 EF 更新到版本 6.4.4
第 2 步:- 重新启动您的应用程序
第 3 步:- 运行迁移命令
对我有用。