【问题标题】:C# Class and Oracle Mapping ParametersC# 类和 Oracle 映射参数
【发布时间】:2011-06-15 05:26:28
【问题描述】:

我在 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 时会出现此问题。 11.2 版本的 DLL 可以在属性中没有架构名称的情况下完美运行。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# oracle types class-attributes


    【解决方案1】:

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

    【讨论】:

      【解决方案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")]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-16
        • 2018-11-21
        • 2012-05-09
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多