Класс C # и параметры сопоставления Oracle - PullRequest
4 голосов
/ 25 января 2011

У меня есть тип, объявленный в базе данных 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 (String customTypeName, String dataSource)

В какой-то момент я захочу отправить код после'DEV_SCHEMA ', но это приведет к сбою кода.

Имя схемы происходит из строки соединения User Id:

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

Могу ли я что-нибудь сделать на стороне Oracle C #, чтобы помочь мне в этом.Т.е. как-то:

  1. Передать имя схемы в качестве параметра атрибута
  2. Определить тип в Oracle так, чтобы мне не нужно было использовать схему

В качестве дополнительной информации эта проблема возникает, когда я пользуюсь клиентом ODP.NET версии 11.1.0.7.Версия DLL 11.2 прекрасно работает без имени схемы в атрибуте.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 26 января 2011

Я обрабатывал это в прошлом, используя следующее:

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")]
2 голосов
/ 25 января 2011

Если вам не нужно придерживаться атрибута OracleCustomTypeMapping, Я думаю, что лучшим решением было бы установить пользовательские сопоставления типов через файл конфигурации.

...