c# - 如何使用 Entity Framework 调用 oracle 包内的存储过程?

标签 c# oracle entity-framework oracle11g devart

我在 oracle 11g 中有一个包如下:

CREATE OR REPLACE PACKAGE "HRS.PKG_TRAINING_SP" as
TYPE T_CURSOR IS REF CURSOR;

procedure GETPERSONNELTRAINIGLIST(
        personnel_Id_in in string,
        base_date_in in string,
        is_current_in in number,
        lst OUT T_CURSOR );
end;

如何使用 Entity Framework (代码优先)执行上述过程包 (GETPERSONNELTRAINIGLIST)?

注意:我正在使用 Entity Framwork 6.0(代码优先)和 devart EF Provider for Oracle。

更新: 我正在使用以下代码:

var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16", ParameterDirection.Input);
var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input);
var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input);

var ATests =
    db.Database.SqlQuery<ATest>(
    "BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in); end;", 
    param1,  param2, param3).ToList();

但出现以下错误:

{"ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'GETPERSONNELTRAINIGLIST'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored"}

最佳答案

请按以下方式重写您的代码:

var param1 = new OracleParameter("personnel_Id_in", OracleDbType.VarChar, "c5eb5589-8fee-47b6-85ad-261a0307cc16",  ParameterDirection.Input);
var param2 = new OracleParameter("base_date_in", OracleDbType.VarChar, "1112", ParameterDirection.Input);
var param3 = new OracleParameter("is_current_in", OracleDbType.Number, 1, ParameterDirection.Input);
var param4 = new OracleParameter("result", OracleDbType.Cursor, ParameterDirection.Output);

var ATests =
db.Database.SqlQuery<ATest>(
"BEGIN PKG_TRAINING_SP.GETPERSONNELTRAINIGLIST(:personnel_Id_in, :base_date_in, :is_current_in, :result); end;", 
param1,  param2, param3, param4).ToList();

另外,我们已经在我们的论坛上联系了您http://forums.devart.com/viewtopic.php?t=29019

关于c# - 如何使用 Entity Framework 调用 oracle 包内的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965605/

相关文章:

sql - 具有不同数据类型的案例语句

.net - Entity Framework 中的复合键在 uwp 中使用 sqlite

c# - 使用 Entity Framework 仅选择某些列然后保存回数据库

c# - 在 EntityFramework 4.0 中处理 DataContext

c# - Oracle 和 SQL Server 数据集比较

c# - 在没有 UAC/管理员权限的情况下托管 WCF 应用程序

c++ - 在代码块上用 C++ 编译 Oracle 数据库环境时出错

sql - 从 oracle tmstmp 字段中删除毫秒

c# - 如何将此 VB.net/C# 代码移植到 Objective-C/iOS?

c# - 在 winform 应用程序 c# 中重置面板滚动位置