C# 如何使用实体框架调用oracle包中的存储过程?

C# 如何使用实体框架调用oracle包中的存储过程?,c#,oracle,entity-framework,oracle11g,devart,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, ls

我在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;
如何使用实体框架(代码优先)执行上述过程包(
GETPERSONNELTRAINIGLIST

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

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

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();

不指定游标变量

lst OUT T_CURSOR
这就是你犯错误的原因


您可以从这里尝试解决方案。

请按以下方式重写代码:

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();
var param1=新的OracleParameter(“人员Id_in”,OracleDbType.VarChar,“c5eb5589-8fee-47b6-85ad-261a0307cc16”,ParameterDirection.Input);
var param2=新的OracleParameter(“base_date_in”,OracleDbType.VarChar,“1112”,ParameterDirection.Input);
var param3=新的OracleParameter(“是当前的”,OracleDbType.Number,1,ParameterDirection.Input);
var param4=新的OracleParameter(“结果”,OracleDbType.Cursor,ParameterDirection.Output);
var ATests=

db.Database.SqlQuery

如何将
lst
参数放入
db.Database.SqlQuery
?没有帮助吗?这是关于
ref cursor
的,但我认为这样做没有真正的问题?执行包中所有过程的最佳实践是什么?当使用代码优先的方法时,我们上面描述的方法(通过SqlQuery方法)是最合适的。有关使用存储过程创建EF模型和使用它们的一般信息,请访问@Devart。请帮助查看此问题,谢谢。
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();