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

Posted

技术标签:

【中文标题】实体框架:值不能为空。参数名称:类型【英文标题】: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”?

【问题讨论】:

【参考方案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命令。这次它表现正常。

【讨论】:

以上是关于实体框架:值不能为空。参数名称:类型的主要内容,如果未能解决你的问题,请参考以下文章

反序列化错误:值不能为空。参数名称:类型

更新方法 - 值不能为空。 (参数“实体”)

System.ArgumentNullException: '值不能为空。参数名称:输入'Xamarin?

值不能为空。参数名称:编码器[重复]

值不能为空。参数名称:httpContext

值不能为空。参数名称:starter中的connectionString appsettings.json