DbContext存储过程oracle 11g

时间:2012-08-17 18:38:21

标签: oracle entity-framework stored-procedures parameters dbcontext

我正在尝试执行具有多个输入/输出参数的存储过程。这就是使用SQLServer的预期方法。

using (Context)
        {
            const string xml = "<test><testc>testing</testc></test>";
            var userIdParam = new SqlParameter { ParameterName = "I_USER_ID", Value = user.ID };
            var dtsParam = new SqlParameter { ParameterName = "I_DTS", Value = DateTime.Now };
            var timeoutParam = new SqlParameter { ParameterName = "I_TIMEOUT", Value = DateTime.Now };
            var xmlParam = new SqlParameter { ParameterName = "I_XML", Value = xml };
            var sessionIdParam = new SqlParameter { ParameterName = "O_SESSION_ID", Value = "", Direction = ParameterDirection.Output };

            var result =
                Context.Database.SqlQuery<string>(
                    "DALLEN.SP_INSERT_SESSION I_USER_ID, I_DTS, I_TIMEOUT, I_XML, O_SESSION_ID out", 
                    userIdParam,
                    dtsParam, 
                    timeoutParam, 
                    xmlParam, 
                    sessionIdParam);
        }

不幸的是,这不适用于oracle。我知道可以使用ref游标代替out参数,但这不是我自己的问题。有没有一种使用dbcontext.database.sqlquery将参数传递给存储过程的好方法?

修改

查询尝试执行时收到错误消息。它解释说它不接受sqlParamters所以我将它们更改为OracleParamters,但这也没有用。

“无法将类型为'System.Data.SqlClient.SqlParameter'的对象强制转换为'Oracle.DataAccess.Client.OracleParameter'。”

步骤:

CREATE OR REPLACE PROCEDURE DALLEN.SP_INSERT_SESSION (
  I_USER_ID                   IN       NUMBER,
  I_DTS                       IN       DATE,
  I_TIMEOUT                   IN       DATE,
  I_XML                       IN       VARCHAR2,
  O_SESSION_ID                OUT      NUMBER
)
AS
BEGIN
  SELECT S_SESSION.NEXTVAL
    INTO O_SESSION_ID
    FROM DUAL;

  INSERT INTO DALLEN.SYS_SESSION
              (ID, USER_ID, DTS, TIMEOUT, XML)
       VALUES (O_SESSION_ID, I_USER_ID, I_DTS, I_TIMEOUT, I_XML);
END;

提前谢谢!

0 个答案:

没有答案