使用ODP.Net托管客户端将对象数组传递给oracle存储过程

我在我的Web API中有以下Employee类。

public class Employee { public string Name { get; set; } public string City { get; set; } } 

我的Web API会在每个请求中收到50个员工记录的列表,并且需要在Oracle数据库中更新这些详细信息。

我遵循将整数数组传递给Oracle存储过程的相同方法,并尝试了以下方法。

在Oracle中创建了以下类型和存储过程。

– 基础类型

 create or replace type EMPTEST AS OBJECT ( Name varchar2(50), City varchar2(50) ); 

– 包

 create or replace PACKAGE pkgUDFArray_Test AS type "T_EMPUDF_ARRAY" is table of EMPTEST; PROCEDURE ProcEmpUDFArray_Test( Param1 IN T_EMPUDF_ARRAY); END pkgUDFArray_Test; 

– 包装体

 create or replace PACKAGE BODY pkgUDFArray_Test AS PROCEDURE ProcEmpUDFArray_Test( Param1 IN T_EMPUDF_ARRAY) AS BEGIN FORALL indx IN 1..Param1.COUNT INSERT INTO Employee(Name,City) VALUES(Param1(indx).Name,Param1(indx).City); END ProcEmpUDFArray_Test; END pkgUDFArray_Test; 

以下是来自Web API的代码。

  List EmpList = new List() { new Employee() { City = "City1", Name="Emp1" }, new Employee() {City = "City2", Name="Emp2" } }; OracleConnection con = new OracleConnection(connectionString); con.Open(); var cmd = con.CreateCommand(); cmd.CommandText = "pkgUDFArray_Test.ProcEmpUDFArray_Test"; cmd.CommandType = CommandType.StoredProcedure; OracleParameter param1 = new OracleParameter(); param1.Direction = ParameterDirection.Input; param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray; param1.Value = EmpList.ToArray(); param1.Size = 2; param1.DbType = DbType.Object; try { cmd.ExecuteNonQuery(); con.Close(); con.Dispose(); } catch (Exception ex) { throw ex; } 

当我尝试这个时,我得到错误“值不在预期范围内。” 在以下行。 param1.Value = EmpList.ToArray();

我知道我需要在这里做更多工作才能使它工作。

我搜索了类似的主题,我找不到有关托管客户端的任何主题。 我知道有一种方法可以使用旧的Oracle.DataAccess.dll,但想知道是否有使用最新托管客户端的方法。