日期:2014-05-17  浏览次数:20449 次

EF 调用 oracle 存储过程失败,有人知道为什么吗?
如果存储过程没有返回游标,就能成功吗,如果返回游标,就是失败,有人知道为什么吗?谢谢
  public ObjectResult<T_ID> USP_TEST(global::System.String mTABLE)
        {
            ObjectParameter mTABLEParameter;
            if (mTABLE != null)
            {
                mTABLEParameter = new ObjectParameter("MTABLE", mTABLE);
            }
            else
            {
                mTABLEParameter = new ObjectParameter("MTABLE", typeof(global::System.String));
            }
            return base.ExecuteFunction<T_ID>("USP_TEST", mTABLEParameter);
        } 


存储过程 也很简单
create or replace procedure USP_TEST(mTable in varchar2,cur_out Out sys_refcursor
) is 
begin
    open cur_out for select * from t_id;
end USP_TEST;

------解决方案--------------------
我做出来了,你要在WEB.CONFIG里面进行配置,与SQL SERVER有很大的区别,只要是返回游标的都必须配置
例子:
 <oracle.dataaccess.client>
    <settings>
      <add name="HR.UPDATE_AND_RETURN_SALARY.RefCursor.NEW_SALARY" value="implicitRefCursor bindinfo='mode=Output'" />
      <add name="HR.UPDATE_AND_RETURN_SALARY.RefCursorMetaData.NEW_SALARY.Column.0" value="implicitRefCursor metadata='ColumnName=FIRST_NAME;BaseColumnName=FIRST_NAME;BaseSchemaName=HR;BaseTableName=EMPLOYEES;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
      <add name="HR.UPDATE_AND_RETURN_SALARY.RefCursorMetaData.NEW_SALARY.Column.1" value="implicitRefCursor metadata='ColumnName=SALARY;NATIVEDATATYPE=Number;ProviderType=Int32'" />
    </settings>
  </oracle.dataaccess.client>

其他的照着配置,但类型一定要对应正确,不然就要报错,很麻烦
------解决方案--------------------
http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm

上面的這個例子更詳細