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、文字列 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 は、属性にスキーマ名がなくても完全に機能します。
どんな助けでも大歓迎です。