如何使用 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 值

EF Core 使用许多用户定义的表类型执行过程

如何通过 FromSqlRaw 在 EF Core 3.0 中调用存储过程

EF Core 存储过程错误:'@p1' 附近的语法不正确 [关闭]

EF Core 调用具有多个连接的存储过程并映射相关数据

无法使用 EF Core 或 LinqToDb EF Core Tools 或 ADO.NET 运行任何存储过程创建脚本