2011-01-25 27 views
4

我在Oracle數據庫中聲明的類型:然而C#類和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;" 

有什麼我可以做ONM C#側的甲骨文幫助我。即,以某種方式:

  1. 傳遞架構名稱作爲屬性參數
  2. 定義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")]