C# 类和 Oracle 映射参数

标签 c# oracle types class-attributes

我在 Oracle 数据库中声明了一个类型:

CREATE OR REPLACE TYPE t_project_code_changes AS TABLE OF obj_project_code_change; 

我像这样在 C# 中映射到这种类型

[OracleCustomTypeMapping("DEV_SCHEMA.OBJ_PROJECT_CODE_CHANGE")]
class ProjectCodeChangeFactory : TypeFactoryTemplate<ProjectCodeChangeDTO>
{
    //code
}

上面的代码没有错误,但是如果我从属性中删除架构名称“DEV_SCHEMA”,它将失败:

[OracleCustomTypeMapping("OBJ_PROJECT_CODE_CHANGE")]

生成以下错误:

Unhandled Exception: System.InvalidOperationException: Custom type mapping for 'ProjectCodeChangeDTO' is not specified or is in valid.
at Oracle.DataAccess.Types.OracleUdt.GetUdtName(String customTypeName, String dataSource)

在某些时候,我想将代码发送到“DEV_SCHEMA”之后,但这会导致代码失败。

模式名称来自连接字符串User Id:

"Data Source=DBNAME;User id=DEV_SCHEMA;Password=pwd;Pooling=False;" 

我可以在 C# 的 Oracle 方面做些什么来帮助我解决这个问题。即,不知何故:

  1. 将架构名称作为属性参数传递
  2. 以不需要使用模式的方式在 Oracle 中定义类型

作为进一步的信息,这个问题在我使用 ODP.NET 客户端版本 11.1.0.7 时出现。 11.2 版本的 DLL 在属性中没有架构名称的情况下也能完美运行。

如有任何帮助,我们将不胜感激。

最佳答案

如果您不需要坚持 OracleCustomTypeMapping 属性方法, 我认为最好的解决方案是通过配置文件设置自定义类型映射。

关于C# 类和 Oracle 映射参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794349/

相关文章:

c# - 将 TIFF LZW 转换为 CCITT

java - IO异常 : Network adapter could not establish the connection

database - 提供多版本数据库以向后兼容生产应用程序/数据库

mysql - Facebook user_id : big_int, 整数还是字符串?

c++ - 如何在 C++ 中使用模板?

list - 区 block 链是单链表吗?

c# - 让一个按钮根据应用程序的状态执行不同的操作?

c# - Java SHA1 哈希到 base64 : unsigned bytes?

c# - IE 缓存从服务器返回的旧数据

sql - 将 Oracle 表限制为单行的简单约束