我在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'的自定义类型映射 未指定或有效 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;"
我有什么办法可以帮助我解决这个问题。即,某种方式:
作为更多信息,当我使用ODP.NET客户端版本11.1.0.7时,这个问题就出现了。 DLL的11.2版本完美地工作,没有属性中的模式名称。
非常感谢任何帮助。
答案 0 :(得分:2)
如果您不需要坚持OracleCustomTypeMapping
属性方法,
我认为最好的解决方案是通过配置文件设置自定义类型映射。
答案 1 :(得分: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")]