2012-06-29 62 views
2

我在一個項目中使用實體框架和Oracle,並嘗試從EF調用存儲過程。該流程進行的實體框架和Oracle客戶端 - 存儲過程問題

Create or Replace Procedure usp_RotaPlateProductie_Select(
    p_afdelingId in varchar2, 
    p_productTypeId in varchar2, 
    p_productieData out sys_refcursor) 
IS 
Begin 
    Open p_productieData for 
     Select rp.Batchnummer, cppo.Productnummer, p.Omschrijving, pra.Bruto_In_Meters 
     From Rotaplateproductie rp inner join Productieresultaatrtplrol pra 
     on rp.Batchnummer = pra.Batchnummer inner join Cpiplusproductieorder cppo 
     on pra.ProductieNummer = cppo.ProductNummer inner join Product p 
     on cppo.Productnummer = p.Productnummer Where rp.Afdelingid = p_afdelingId 
     and rp.producttype = p_productTypeId; 
END; 

但當EF執行我得到以下

ORA-06550: line 1, column 8: 
PLS-00306: wrong number or types of arguments in call to 'USP_ROTAPLATEPRODUCTIE_SELECT. 
ORA-06550: line 1, column 8: 
PL/SQL: Statement IGNORED. 

我使用下面的代碼調用這個程序錯誤的函數

public ObjectResult<RotaPlateProductie> Search_RotaPlateProductie(global::System.String p_AFDELINGID, global::System.String p_PRODUCTTYPEID) 
    { 
     ObjectParameter p_AFDELINGIDParameter; 
     if (p_AFDELINGID != null) 
     { 
      p_AFDELINGIDParameter = new ObjectParameter("P_AFDELINGID", p_AFDELINGID); 
     } 
     else 
     { 
      p_AFDELINGIDParameter = new ObjectParameter("P_AFDELINGID", typeof(global::System.String)); 
     } 

     ObjectParameter p_PRODUCTTYPEIDParameter; 
     if (p_PRODUCTTYPEID != null) 
     { 
      p_PRODUCTTYPEIDParameter = new ObjectParameter("P_PRODUCTTYPEID", p_PRODUCTTYPEID); 
     } 
     else 
     { 
      p_PRODUCTTYPEIDParameter = new ObjectParameter("P_PRODUCTTYPEID", typeof(global::System.String)); 
     } 

     return base.ExecuteFunction<RotaPlateProductie>("Search_RotaPlateProductie", p_AFDELINGIDParameter, p_PRODUCTTYPEIDParameter); 
    } 

這裏RotaPlateProductie是我從中綁定結果集的實體 請幫忙。

+0

你怎麼罵的程序?錯誤是說你用錯誤的數字或類型的參數來調用過程,你的過程的目的是什麼?你能提供更多細節嗎? – mcha

+0

@mcha - 使用EF的函數導入,我在後面的Model代碼中取出SP,並使用Context.FunctionName我使用所需的輸入參數調用該過程。讓我知道如果你需要更多信息 – Maverick

+0

請編輯你的問題,並添加設置參數並調用存儲過程的代碼。謝謝。此外,是否修改了此過程,並在導入後添加或刪除了一個參數? –

回答

2

您必須添加配置; IIN你的情況應該是如下:

<oracle.dataaccess.client 
    <settings> 
     <add name="rp.usp_RotaPlateProductie_Select.RefCursor.p_productieData" value="implicitRefCursor bindinfo='mode=Output'" />... 
    <settings> 
</oracle.dataaccess.client