.NET Core下Scaffold-DbContext执行失败:TypeLoadException加载ProductInfo失败
解决ASP.NET Core 3.1中Oracle数据库Scaffold-DbContext的TypeLoadException问题
你遇到的核心问题是EF Core相关NuGet包版本严重不匹配,导致内部类型加载失败。你同时安装了3.1.2版本的Microsoft.EntityFrameworkCore,却搭配了2.2.x甚至1.x版本的Design、Tools等依赖包,这些版本之间的API差异直接引发了ProductInfo类型加载失败的异常。下面是一步步的修复方案:
1. 统一EF Core系列包的版本
首先要把所有EF Core相关的包统一升级/降级到和Microsoft.EntityFrameworkCore 3.1.2一致的版本:
- 先卸载这些版本不兼容的包:
Microsoft.EntityFrameworkCore.Design 2.2.6Microsoft.EntityFrameworkCore.Relational 2.2.6Microsoft.EntityFrameworkCore.Relational.Design 1.1.6(这个包在EF Core 2.0之后就被废弃了,完全不需要安装)Microsoft.EntityFrameworkCore.Tools 2.2.6
- 然后安装对应3.1.2版本的包:
Microsoft.EntityFrameworkCore.Design 3.1.2Microsoft.EntityFrameworkCore.Relational 3.1.2Microsoft.EntityFrameworkCore.Tools 3.1.2
2. 适配Oracle EF Core驱动版本
你当前用的Oracle.EntityFrameworkCore 2.19.6是适配EF Core 2.x的版本,和EF Core 3.1不兼容。需要换成支持EF Core 3.1的Oracle驱动版本,比如Oracle.EntityFrameworkCore 3.19.80(这个版本官方适配EF Core 3.1),同时确保Oracle.ManagedDataAccess.Core的版本和它保持一致(比如同样是3.19.80)。
3. 修正Scaffold命令的Provider参数
你在命令里用的Oracle.ManagedDataAccess是旧的驱动名称,针对EF Core的正确Provider名称应该是Oracle.EntityFrameworkCore。修正后的完整命令如下:
Scaffold-DbContext "DATA SOURCE=(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myHostName)(PORT=myPortNumber)))(CONNECT_DATA=(SID=mySID)(SERVER=DEDICATED))); User ID=myID;Password=myPassword;" Oracle.EntityFrameworkCore -OutputDir Models -Tables myTableName
4. 额外排查点
- 确保在程序包管理器控制台的「默认项目」下拉框里选中的是你的ASP.NET Core 3.1 API项目,避免命令跑错项目
- 如果执行命令还是有问题,可以尝试清理项目(右键项目→清理)、删除bin和obj目录,然后重启Visual Studio再重新执行
内容的提问来源于stack exchange,提问作者TheGreatZab
相关产品推荐
相关产品推荐

