4

我在 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")]

生成以下错误:

未处理的异常:System.InvalidOperationException:“ProjectCodeChangeDTO”的自定义类型映射未指定或有效。
在 Oracle.DataAccess.Types.OracleUdt.GetUdtName(字符串 customTypeName,字符串数据源)

在某些时候,我希望将代码发送到“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 时会出现此问题。DLL 的 11.2 版本可以在属性中没有架构名称的情况下完美运行。

任何帮助将非常感激。

4

2 回答 2

2

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

于 2011-01-25T16:08:51.947 回答
2

我过去使用以下方法处理过这个问题:

internal static class OracleConfig
{
#if SHIPPING
    internal const string SCHEMA = @"REL.";
#else
    internal const string SCHEMA = @"DEV.";
#endif
}

然后你可以像这样使用它:

[OracleCustomTypeMapping(OracleConfig.SCHEMA + "OBJ_PROJECT_CODE_CHANGE")]
于 2011-01-25T21:05:13.277 回答