.NET Core 3.1 Oracle项目无法访问ExecuteSqlRaw/FromSqlRaw函数求解
无法访问ExecuteSqlRaw/FromSqlRaw函数的原因及解决办法
项目环境
- 基于.NET Core 3.1框架
- 对接Oracle数据库
- 已安装的NuGet包版本:
Microsoft.EntityFrameworkCore v5.0.12 Microsoft.EntityFrameworkCore.Design v5.0.12 Microsoft.EntityFrameworkCore.Relational v5.0.12 Microsoft.EntityFrameworkCore.SqlServer v3.1.21 Microsoft.EntityFrameworkCore.Tools v5.0.12 Oracle.EntityFrameworkCore v5.21.4
问题原因
1. EF Core版本冲突与框架不匹配
ExecuteSqlRaw和FromSqlRaw是EF Core 3.0及以上版本引入的API,但你的项目存在两处关键版本问题:
- 混合引用了不同大版本的EF Core包:多数EF Core包为v5.0.x(对应.NET 5框架),但
Microsoft.EntityFrameworkCore.SqlServer是v3.1.x(对应.NET Core 3.1框架),跨版本混合会导致API无法被正确识别。 - 项目基于.NET Core 3.1,却使用了适配.NET 5的EF Core v5.0.x包,框架与EF Core版本不兼容,引发API调用异常。
2. 命名空间未正确引用
这两个方法属于Microsoft.EntityFrameworkCore命名空间下的扩展方法,若代码文件未添加该命名空间引用,编译器无法识别这些方法。
解决步骤
统一EF Core与框架匹配的版本
- 将所有EF Core相关包(包括
Microsoft.EntityFrameworkCore.SqlServer)统一调整为.NET Core 3.1对应的EF Core 3.1.x系列版本(如3.1.21)。 - 更换
Oracle.EntityFrameworkCore为适配EF Core 3.1的版本,确保Oracle驱动与EF Core版本兼容。
- 将所有EF Core相关包(包括
添加必要的命名空间
在调用ExecuteSqlRaw或FromSqlRaw的代码文件顶部添加:using Microsoft.EntityFrameworkCore;验证DbContext继承关系
确认你的自定义DbContext类继承自Microsoft.EntityFrameworkCore.DbContext,而非旧版本或第三方的DbContext实现。
内容的提问来源于stack exchange,提问作者ashkufaraz
相关产品推荐
相关产品推荐

