Entity Framework Core 5是否不支持Oracle 10G?使用Scaffold-DbContext反向生成模型报错问题咨询
问题本质
你碰到的ORA-00904: "DEFAULT_COLLATION": invalid identifier错误,核心原因是EF Core 5配套的Oracle.EntityFrameworkCore驱动默认使用了Oracle 12c及以上版本才有的系统字段DEFAULT_COLLATION,而Oracle 10G根本没有这个标识符,所以在生成模型时触发了这个异常。这也是为什么你在12c/19c上能正常执行命令,到10G就报错的原因。
关于EF Core 5是否支持Oracle 10G
直接给结论:EF Core 5及对应的Oracle.EntityFrameworkCore 5.x版本已经完全不支持Oracle 10G。Oracle官方从EF Core 3.x开始就逐步停止对10G的兼容支持,到EF Core 5发布时,彻底移除了所有针对10G的适配逻辑。
解决方法
这里提供三种可行的方案,按推荐优先级排序:
1. 降级到支持Oracle 10G的EF Core版本(最快解决)
如果你必须继续使用Oracle 10G,最稳妥的办法是降级到EF Core 2.2 + Oracle.EntityFrameworkCore 2.2.x,这是官方最后一个明确支持Oracle 10G的版本组合。操作步骤如下:
- 先卸载当前项目中的EF Core 5相关包:
Uninstall-Package Microsoft.EntityFrameworkCore Uninstall-Package Microsoft.EntityFrameworkCore.Tools Uninstall-Package Oracle.EntityFrameworkCore - 安装EF Core 2.2及对应Oracle驱动:
Install-Package Microsoft.EntityFrameworkCore -Version 2.2.6 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.2.6 Install-Package Oracle.EntityFrameworkCore -Version 2.2.0 - 重新执行你的Scaffold-DbContext命令(语法和之前完全一致):
Scaffold-DbContext "DATA SOURCE=XPERTISE.world;PASSWORD=XXX;USER ID=SCHEDULE" Oracle.EntityFrameworkCore -OutputDir Models -Tables MEETINGS -Force
2. 迁移数据库到Oracle 12c+(长期最优方案)
Oracle 10G是非常老旧的版本,官方早在2013年就停止了所有支持,存在严重的安全漏洞和性能瓶颈。如果条件允许,强烈建议把数据库迁移到Oracle 12c或更高版本,这样不仅能解决EF Core 5的兼容问题,还能享受到新版本的诸多特性(比如分区表、JSON支持等)以及官方的技术支持。
3. 手动修改Oracle驱动源码(进阶方案)
如果你不想降级EF Core,也可以尝试修改Oracle.EntityFrameworkCore的源码,移除对DEFAULT_COLLATION字段的依赖:
- 克隆Oracle官方的Oracle.EntityFrameworkCore仓库(注意找对应EF Core 5的分支)
- 定位到
OracleDatabaseModelFactory.cs文件中的GetCollation方法(就是报错堆栈里提到的那个方法),将其中依赖DEFAULT_COLLATION的逻辑替换为Oracle 10G支持的获取 collation 的方式,或者直接注释掉相关代码(如果你的场景不需要 collation 信息) - 重新编译驱动,然后把项目中的NuGet包引用替换为本地编译的版本
不过这个方案需要一定的.NET源码编译经验,而且后续官方更新驱动后可能会失效,仅推荐有开发能力的同学尝试。
内容的提问来源于stack exchange,提问作者Oscar Rodriguez Urbina

