将Oracle过程映射到CodeFirst EF6

时间:2016-09-30 22:35:52

标签: c# oracle stored-procedures entity-framework-6 code-first

我有一个复杂的查询要执行,我想在SQL中执行它,而不是使用linq查询,因为在SQL中太快了。

我一直在网上搜索,如果EF6支持使用CodeFirst的存储过程,我没有太多清楚。

我有一个这样的程序(Get resultset from oracle stored procedure)来获取Select

的结果
CREATE OR REPLACE PROCEDURE CENTER_FROM_LOCATION(LOC_OID IN NUMBER, LOC_CENTER OUT SYS_REFCURSOR) AS
  BEGIN
    OPEN LOC_CENTER FOR
    SELECT * FROM (
      .....
    )WHERE ROWNUM = 1;
  END;

我的C#代码

public ObjectResult<TYPE_IN_MODEL> CENTER_FROM_LOCATION(decimal LocationOID)
{
    var Parameter_LocationOID = new ObjectParameter("LOC_OID", LocationOID);
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<TYPE_IN_MODEL>("CENTER_FROM_LOCATION", Parameter_LocationOID);
}

第一个奇怪的是,如果我将参数设置为Int32并且在模型中将属性OID定义为Int32,则它会给我一个异常。使用十进制工作但由于参数数量而引发异常。

System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-06550: línea 1, columna 8:
PLS-00306: número o tipos de argumentos erróneos al llamar a 'CENTER_FROM_LOCATION'
ORA-06550: línea 1, columna 8:
PL/SQL: Statement ignored
...

任何人都可以向我展示Oracle中一个存储过程的示例,以获取某些选择的结果,然后使用EF6映射CodeFirst中的存储过程。

0 个答案:

没有答案