我在 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 方面做些什么来帮助我解决这个问题。即,不知何故:
- 将架构名称作为属性参数传递
- 以不需要使用模式的方式在 Oracle 中定义类型
作为进一步的信息,这个问题在我使用 ODP.NET 客户端版本 11.1.0.7 时出现。 11.2 版本的 DLL 在属性中没有架构名称的情况下也能完美运行。
如有任何帮助,我们将不胜感激。
最佳答案
如果您不需要坚持 OracleCustomTypeMapping
属性方法,
我认为最好的解决方案是通过配置文件设置自定义类型映射。
关于C# 类和 Oracle 映射参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4794349/