使用Entity Framework代码优先和DevArt驱动程序调用Oracle存储过程

时间:2015-09-09 02:22:58

标签: oracle entity-framework stored-procedures entity-framework-6 devart

我有一个Oracle存储过程,我尝试使用DevArt Oracle驱动程序(最新版本)以EF代码优先(DbContext)调用。我不知道为什么这么难(我希望我使用的是SQL Server),但我不能让它工作。我正在做this post

中描述的内容

我按照DevArt团队自己提供的答案,我仍然得到了一个Oracle异常,虽然略有不同:

  

ora-01036非法变量名称/编号

这是我的存储过程的签名:

create or replace PROCEDURE GP_PARTICIPANTDETAILS 
(
  p_contracts_list VARCHAR2,
  p_participant_type CHAR DEFAULT NULL,
  p_dob_range_begin DATE DEFAULT NULL,
  p_dob_range_end DATE DEFAULT NULL,
  p_part_name VARCHAR DEFAULT NULL,
  p_ssn VARCHAR DEFAULT NULL,
  p_status_list VARCHAR2 DEFAULT NULL,
  p_start_index IN INT DEFAULT 0, 
  p_records_to_take IN INT DEFAULT 0,
  cp_result OUT SYS_REFCURSOR
)

我正在创建这样的所有参数(不会把它们全部放在这里,因为有很多,但我为所有人定义名称,值,类型和方向)

OracleParameter paramContracts = new OracleParameter("p_contracts_list",  OracleDbType.VarChar, contracts.ToString(), System.Data.ParameterDirection.Input);   

cursor参数的定义如下:

OracleParameter paramOutputCursor = new OracleParameter("cp_cresult", OracleDbType.Cursor, System.Data.ParameterDirection.Output);      

然后我称之为:

string sqlQuery = "BEGIN OMNIDB.GP_PARTICIPANTDETAILS(:p_contracts_list, :p_participant_type, :p_dob_range_begin, :p_dob_range_end, :p_part_name, :p_ssn, :p_status_list, :p_start_index, :p_records_to_take, :cp_result); END;";

var details = context.Database.SqlQuery<ParticipantDetail>(sqlQuery, paramContracts, paramPartType, paramDobBegin, paramDobEnd, paramPartName, paramSSN, paramStatuses, paramStartIndex, paramRecordsToTake, paramOutputCursor).ToList();    

我尝试的一切都给出了同样的错误。使用参数名称之前的:,没有: ...我验证了代码中params的拼写与过程的声明匹配。

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

我们已经复制了这个问题并正在对其进行调查。我们会通知您结果。如果您对Devart产品有任何疑问,请通过http://www.devart.com/company/contactform.html与我们联系。