ODP.net 是否支持另一个 UDT 中的 UDT 字段

Does ODP.net support UDT field inside another UDT

我的架构中有两个用户定义类型:

create or replace
TYPE CITIZEN
AS
  OBJECT
  (
    PIN           VARCHAR2(7 CHAR),
    LNAME         VARCHAR2(30 CHAR) ,
    FNAME         VARCHAR2(30 CHAR), 
    .....)

create or replace
TYPE INW_DOC
AS
  OBJECT
  (
    CITIZEN DOKCENTRA.CITIZEN,
    SUBJECTID          NUMBER(2,0),
    CONCERNED_FIELD NUMBER(1,0),
    APPTYPE            NUMBER(2,0),
    REMARKS            VARCHAR2(1000 CHAR),
    ......)

我使用 ODP.NET Visual Studio 工具生成了相应的 类。使用下面的代码,我尝试执行一个存储过程,该过程接受一个 INW_DOC:

类型的输入参数
OracleConnection con= new OracleConnection(connectionString);
OracleCommand cmd=con.CreateCommand();
cmd.CommandText="PKG$DOCS.SAVE_DOC";
cmd.CommandType=CommandType.StoredProcedure;
OracleParameter param = new OracleParameter();
param.ParameterName = "V_INW_DOC";
param.UdtTypeName = "MySchema.INW_DOC";
param.OracleDbType = OracleDbType.Object;
param.Value = GetNewInwDoc();
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
con.Open();
cmd.ExecuteNonQuery();

我收到 ArgumentException "Invalid parameter binding" 异常。除了参数名称和参数类型的正确性之外,我没有太多要检查的。我担心在意识到 ODP.NET 不支持另一个 UDT 中的 UDT 字段之前已经浪费了大量时间。有什么想法吗?

虽然我无法说明真正的问题,但将 OracleDataAccess.dll 版本从 2.xxx 更改为 4.xxx 解决了问题。