如何将 Oracle Ref_Cursor 作为输出传递给 Entity Framework
How to pass Oracle Ref_Cursor as output to the Entity Framework
我有一个 Oracle 程序包,其中有一个过程:
PROCEDURE pGetData(pi_dStartDate IN date,
pi_dEndDate IN date,
po_curData OUT sys_refcursor,
po_nStatus OUT NUMBER,
po_sErrorText OUT VARCHAR2)
如您所见,有一个 sys_refcursor 输出参数。
我已经完成了 link 中提到的以下步骤:EntityFrameworkOBE 以使用 Entityframwork 添加程序。
但是当我从模型浏览器“添加函数”时,我只得到 4 个参数来传递 DBContext 生成的代码中的函数。
public virtual ObjectResult<pGetData_Result> ProcGetData
(Nullable<System.DateTime> pI_DSTARTDATE,
Nullable<System.DateTime> pI_DENDDATE,
ObjectParameter pO_NSTATUS,
ObjectParameter pO_SERRORTEXT)
{
var pI_DSTARTDATEParameter = pI_DSTARTDATE.HasValue ?
new ObjectParameter("PI_DSTARTDATE", pI_DSTARTDATE) :
new ObjectParameter("PI_DSTARTDATE", typeof(System.DateTime));
var pI_DENDDATEParameter = pI_DENDDATE.HasValue ?
new ObjectParameter("PI_DENDDATE", pI_DENDDATE) :
new ObjectParameter("PI_DENDDATE", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<pGetData_Result>
("pGetData", pI_DSTARTDATEParameter, pI_DENDDATEParameter, pO_NSTATUS, pO_SERRORTEXT);
}
我无法通过“Ref_Cursor”,因此出现错误:
"ORA-06550: line 1, column 8:\nPLS-00306: wrong number or types of arguments in call to 'PGETUTILTSINTILEDATA'\nORA-06550: line 1, column 8:\nPL/SQL: Statement ignored"
请帮忙。
谢谢。
这是我尝试过的正确方法。
代码没有返回值的唯一问题是我为我的 EDMX 文件制作了一个单独的 class 库。
解决这个问题:
Go to properties of the EDMX file and set the "Copy to Output Directory" to "Copy Always".
如果您将 EDMX 文件包含在主可执行应用程序的同一目录中,则不会有任何问题,您可以执行我在上面定义的相同方法。
我有一个 Oracle 程序包,其中有一个过程:
PROCEDURE pGetData(pi_dStartDate IN date,
pi_dEndDate IN date,
po_curData OUT sys_refcursor,
po_nStatus OUT NUMBER,
po_sErrorText OUT VARCHAR2)
如您所见,有一个 sys_refcursor 输出参数。 我已经完成了 link 中提到的以下步骤:EntityFrameworkOBE 以使用 Entityframwork 添加程序。
但是当我从模型浏览器“添加函数”时,我只得到 4 个参数来传递 DBContext 生成的代码中的函数。
public virtual ObjectResult<pGetData_Result> ProcGetData
(Nullable<System.DateTime> pI_DSTARTDATE,
Nullable<System.DateTime> pI_DENDDATE,
ObjectParameter pO_NSTATUS,
ObjectParameter pO_SERRORTEXT)
{
var pI_DSTARTDATEParameter = pI_DSTARTDATE.HasValue ?
new ObjectParameter("PI_DSTARTDATE", pI_DSTARTDATE) :
new ObjectParameter("PI_DSTARTDATE", typeof(System.DateTime));
var pI_DENDDATEParameter = pI_DENDDATE.HasValue ?
new ObjectParameter("PI_DENDDATE", pI_DENDDATE) :
new ObjectParameter("PI_DENDDATE", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<pGetData_Result>
("pGetData", pI_DSTARTDATEParameter, pI_DENDDATEParameter, pO_NSTATUS, pO_SERRORTEXT);
}
我无法通过“Ref_Cursor”,因此出现错误:
"ORA-06550: line 1, column 8:\nPLS-00306: wrong number or types of arguments in call to 'PGETUTILTSINTILEDATA'\nORA-06550: line 1, column 8:\nPL/SQL: Statement ignored"
请帮忙。
谢谢。
这是我尝试过的正确方法。 代码没有返回值的唯一问题是我为我的 EDMX 文件制作了一个单独的 class 库。
解决这个问题:
Go to properties of the EDMX file and set the "Copy to Output Directory" to "Copy Always".
如果您将 EDMX 文件包含在主可执行应用程序的同一目录中,则不会有任何问题,您可以执行我在上面定义的相同方法。