C#实体框架代码首先使用用户定义的类型作为参数调用oracle存储过程

时间:2019-04-03 10:36:22

标签: c# .net oracle stored-procedures code-first

我们如何首先使用实体​​框架代码将用户定义的类型或表类型传递给存储过程?

我正在使用:-

  1. C#V7.2
  2. 实体框架V6(代码优先)
  3. Oracle数据库11G。
  4. Visual Studio 2017

下面的代码在数据库上创建对象。

CREATE or replace TYPE PRT_TEST_typ AS OBJECT
            ( TEST_SER       NUMBER(9),
          TEST_DESC      VARCHAR2(100)      
        );

下面的代码创建类型表

CREATE or replace TYPE PRT_TEST_tab AS TABLE OF PRT_TEST_typ 

以下代码创建表。

CREATE TABLE "PRT_TEST" 
   (    "TEST_SER" NUMBER(9,0), 
    "TEST_DESC" VARCHAR2(100 BYTE)
   ) ;

以下代码创建存储过程,以将输入的PRT_TEST_tab参数插入表中。

CREATE or replace PROCEDURE PRC_TEST
( P_PRT_TEST_tab IN PRT_TEST_tab,
  P_XX IN  VARCHAR2 )
IS
    P_RESULT_CODE  NUMBER ;
    P_RESULT_TEXT  VARCHAR2(400);
BEGIN
   FOR I IN P_PRT_TEST_tab.FIRST .. P_PRT_TEST_tab.LAST  LOOP
       INSERT INTO PRT_TEST ( TEST_SER ,  TEST_DESC  )
       VALUES (  P_PRT_TEST_tab(I).TEST_SER , P_PRT_TEST_tab(I).TEST_DESC);
   END LOOP;

   COMMIT;     
END;

这是我的尝试

List<Test1> lis = new List<Test1>();
lis.Add(new Test1 { TEST_SER = 123, TEST_DESC = "a1" });
lis.Add(new Test1 { TEST_SER = 456, TEST_DESC = "b2" });

var P1 = new OracleParameter("P1", OracleDbType.RefCursor, lis, ParameterDirection.Input);
var P2 = new OracleParameter("P2", OracleDbType.NVarchar2, p1, ParameterDirection.Input);

var sss = _context.Database.ExecuteSqlCommand(
"BEGIN PRC_TEST(" +
":P1, " +
":P2 " +
"); " +
"END;",
P1,
P2
);

0 个答案:

没有答案
相关问题