如何使用 EF Core 5 执行存储过程 ORACLE?
Posted
技术标签:
【中文标题】如何使用 EF Core 5 执行存储过程 ORACLE?【英文标题】:How to Execute Stored Procedure ORACLE with EF Core 5? 【发布时间】:2021-03-08 14:01:18 【问题描述】:要尝试执行此方法,请启动此错误:
Microsoft.EntityFrameworkCore.Database.Command[20102] Failed executing DbCommand (165ms) [Parameters=[], CommandType='Text', CommandTimeout='0'] EXEC SYSTEM.CLIENTESLISTA Microsoft.EntityFrameworkCore.Infrastructure[0] 2021-03-08 10:19:14.220792 ThreadID:4 (ERROR) OracleExecutionStrategy.ExecuteAsync() :
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00900: 无效的 SQL 语句
public class Query
[UseDbContext(typeof(DataContext))]
public IQueryable<Cliente> GetClientes([ScopedService] DataContext dataContext)
//List<Cliente> list;
string sql = "EXEC SYSTEM.CLIENTESLISTA";
var cliente = dataContext.CLIENTE.FromSqlRaw(sql);
return cliente;
//return dataContext.CLIENTE;
使用的库:
热巧克力 11.0 Net Core 5 框架
【问题讨论】:
【参考方案1】:你应该这样写:
string sql = "begin SYSTEM.CLIENTESLISTA(); end;";
如果存储过程有参数:
string sql = "begin SYSTEM.CLIENTESLISTA(:param1, :param2); end;";
这里最重要的是两个分号;
进入字符串查询。
【讨论】:
【参考方案2】:execute-stored-procedure-oracle-with-ef-core-5 不存在,存储过程适用于 micro-orm 库 (Dapper)。
EF5 查询直接使用 SQL 调用
【讨论】:
以上是关于如何使用 EF Core 5 执行存储过程 ORACLE?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取使用 EF Core 从存储过程中插入的记录的 id 值
如何通过 FromSqlRaw 在 EF Core 3.0 中调用存储过程
EF Core 存储过程错误:'@p1' 附近的语法不正确 [关闭]
无法使用 EF Core 或 LinqToDb EF Core Tools 或 ADO.NET 运行任何存储过程创建脚本