C # Entity Framework код первого вызова хранимой процедуры оракула с пользовательским типом в качестве параметров - PullRequest
0 голосов
/ 03 апреля 2019

Как мы можем передать определенный пользователем тип или тип таблицы в хранимую процедуру, используя сначала код структуры Entity?

Я использую: -

  1. C # V7.2
  2. Entity Framework 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
);
...