C# класс и параметры картирования Oracle
-
24-10-2019 - |
Вопрос
У меня есть тип, объявленный в базе данных Oracle:
CREATE OR REPLACE TYPE t_project_code_changes AS TABLE OF obj_project_code_change;
Я сопоставляю этот тип в C# как SO SO
[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;"
Есть ли что -нибудь, что я могу сделать в Oracle of C# стороне, чтобы помочь мне с этим. Т.е. как -то:
- Передайте имя схемы в качестве параметра атрибута
- Определите тип Oracle так, чтобы мне не нужно использовать схему
В качестве дополнительной информации, эта проблема представляет себя, когда я использую клиентскую версию ODP.net 11.1.0.7. 11.2 версия DLL отлично работает без имени схемы в атрибуте.
Любая помощь приветствуется.
Решение
Если вам не нужно придерживаться OracleCustomTypeMapping
Подход атрибута, я думаю, лучшим решением было бы установить отображения пользовательских типов через файл конфигурации.
Другие советы
Я занимался этим в прошлом, используя следующее:
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")]