2011-01-25 22 views
4

C#クラスとOracleのマッピングパラメータ:私は上記のコードはエラーなしで動作しますので、私は、Oracle Databaseで宣言された型持って

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

のようにC#で、このタイプにマップ

CREATE OR REPLACE TYPE t_project_code_changes AS TABLE OF obj_project_code_change; 

を、しかし、属性からスキーマ名 '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」を超えて出荷されることになりますが、コードが失敗することになります。私はこれで私を助けるために、C#側のオラクルをONM何かできることはあり

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

スキーマ名は、接続文字列User Idから来ています。すなわち、何とか:

  1. は私がのさらなるビットとしてスキーマ

を使用する必要はありません方法で、Oracleでタイプを定義する属性パラメータ

  • としてスキーマ名を渡しますODP.NETクライアント・バージョン11.1.0.7を使用すると、この問題が発生します。 11.2バージョンのDLLは、属性のスキーマ名なしで完全に動作します。

    ご協力いただければ幸いです。

  • 答えて

    2

    アトリビュートアプローチ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")] 
    
    関連する問題