Devart搭配Oracle 10g与EF Core 5生成模型时为何提示找不到提供程序
报错核心诱因及排查方向
- 安装的NuGet包分支不匹配:Devart.Data.Oracle.EFCore 9.14.1234 是跨EF Core版本的大版本,不同子版本包会绑定特定的EF Core大版本。如果你选了适配EF Core 6/7/8的安装分支,哪怕项目用的是.NET 5+EFCore5的组合,EF工具链也会因为程序集适配的目标框架不兼容,扫不到对应的提供程序。
- 包引用未实际写入项目:如果本地NuGet缓存损坏,有时候包管理器会显示安装成功,但实际
Project1.csproj里根本没生成对应包的引用节点,EF工具顺着项目依赖扫描的时候自然找不到目标程序集。 - 全局EF工具版本不匹配:如果你本机全局装的
dotnet ef是对应EFCore 7/8的高版本,扫描EFCore5生态下的第三方提供程序时,会出现元数据识别兼容问题,直接抛出找不到程序集的报错。 - 命令里的提供程序名和实际程序集名有偏差:部分9.x分支的Devart Oracle EFCore提供程序,实际暴露给工具链的程序集名称,和通用写法
Devart.Data.Oracle.EFCore有细微区别(比如多了Entity字段),和命令里指定的名称对不上,就会触发找不到程序集的报错。
快速排查操作步骤
- 在项目根目录执行
dotnet list package,确认输出列表中同时存在:版本为9.14.1234的Devart.Data.Oracle.EFCore包、版本为5.x的Microsoft.EntityFrameworkCore核心包,没有跨版本混装其他高版本EFCore包。 - 将本机全局的
dotnet ef工具降级到EFCore5适配版本,执行命令dotnet tool update --global dotnet-ef --version 5.0.17,避免高版本工具的兼容问题。 - 直接打开
Project1.csproj文件,检查Devart对应的包引用是否真实存在;如果引用缺失,就清除本地NuGet缓存后重新安装对应包。 - 打开项目编译输出的
bin目录,核对实际生成的Devart相关dll文件名,确认scaffold命令里填写的提供程序名,和dll去掉后缀后的字符串完全一致。
内容的提问来源于stack exchange,提问作者littleO
相关产品推荐
相关产品推荐

