Лучший отвечающий
Как работать с БД Oracle если имя схемы на этапе разработки не известно?

Вопрос
-
Здравствуйте!
Как работать с БД Oracle (используя строгую типизацию данных) если имя схемы на этапе разработки не известно?
Это может понадобиться, например, при написании общего решения. Как заказчик назовёт схему в Oracle неизвестно. Кроме того, на одном экземпляре БД это решение может быть развёрнуто несколько раз в разных схемах. Структура БД одинакова.
Посмотрел возможности ADO.NET, ADO.NET Entity Framework, LINQ to Oracle. Во всех реализациях имя схемы пишется константами в автогенерируемом коде и должно быть определенно на этапе разработки.- Перемещено I.Vorontsov 16 марта 2010 г. 11:10 (От:Разработка Windows-приложений)
- Перемещено Siddharth Chavan 2 октября 2010 г. 0:16 MSDN Forums Consolidation (От:SQL Server для разработчиков)
11 февраля 2010 г. 12:24
Ответы
-
Странно... Тему перенесли в SQL Server...
Проблема для Oracle ещё актуальна. Пока склоняюсь к таким вариантам (на основе DataSet):
1. Дописывать partial адаптеры. Создать перегружаемый конструктор принимающий в качестве аргумента, например, OracleConnection. В этом же конструкторе заменять значения protected свойств (заменять имя схемы в sql команде).
+ Строгая типизация
— Много ручной работы
— Можно забыть (не знать) что нужно использовать конструктор с аргументом.
2. Написать код, который через рефлексию будет заменять имя схемы в sql команде protected свойства.
+ Мало ручной работы.
— Не строгая типизация. В случае перехода на новую версию .NET возможны проблемы.
— Можно забыть после создания адаптера вызвать код замены имени схемы и "помнить" её название.
3. Написать код, который будет при запуске приложения будет динамически менять код классов адаптеров (например, в конструктор по умолчанию добавит код коррекции имени схемы) и перекомпилировать его.
+ Вызывается только один раз.
+ Ручная работа практически отсутствует.
— Очень "низкий" уровень.
— Замедлит запуск приложения (время уйдёт на многократный запуск CSC).
— В случае перехода на новую версию .NET возможны проблемы.
Какие ещё — и + есть? По какому пути лучше пойти? У меня пока приоритеты такие: 3, 2, 1.
Но все эти варианты решения проблемы являются "заплаточными". Почему в ADO.NET этого не предусмотрели? Я не сомневаюсь в компетенции специалистов Microsoft. Видимо я чего-то не понимаю. Интересно, чего?- Помечено в качестве ответа Abolmasov Dmitry 17 ноября 2010 г. 10:14
18 марта 2010 г. 7:18
Все ответы
-
При строгой типизации данных, думаю, что это будет не возможно.
(разве только извратиться очень ...)
По сути нужно создать схему, и менять ее по ходу проекта ...16 февраля 2010 г. 6:48 -
При строгой типизации данных, думаю, что это будет не возможно.
(разве только извратиться очень ...)
По сути нужно создать схему, и менять ее по ходу проекта ...
Сейчас перед билдом перегенерирую DataSet под конкретную схему.
Технически проблем реализовать хранение имени схемы набора данных в конфигурационном файле я не вижу. Всё что нужно - в существующих автогенераторах кода использовать не "schema1" а schemaname - константу. Почему это не реализуют разработчики framework-ов? Неужели нужно создавать свой велосипед "LINQ to Oracle" и прочие... С одним отличием: имя рабочей схемы - параметр.16 февраля 2010 г. 7:55 -
Причём я так понимаю, в SQL Server такой проблемы нет, там в ConnectionString указывается Initial Catalog.
Всё правильно?18 февраля 2010 г. 6:12 -
Странно... Тему перенесли в SQL Server...
Проблема для Oracle ещё актуальна. Пока склоняюсь к таким вариантам (на основе DataSet):
1. Дописывать partial адаптеры. Создать перегружаемый конструктор принимающий в качестве аргумента, например, OracleConnection. В этом же конструкторе заменять значения protected свойств (заменять имя схемы в sql команде).
+ Строгая типизация
— Много ручной работы
— Можно забыть (не знать) что нужно использовать конструктор с аргументом.
2. Написать код, который через рефлексию будет заменять имя схемы в sql команде protected свойства.
+ Мало ручной работы.
— Не строгая типизация. В случае перехода на новую версию .NET возможны проблемы.
— Можно забыть после создания адаптера вызвать код замены имени схемы и "помнить" её название.
3. Написать код, который будет при запуске приложения будет динамически менять код классов адаптеров (например, в конструктор по умолчанию добавит код коррекции имени схемы) и перекомпилировать его.
+ Вызывается только один раз.
+ Ручная работа практически отсутствует.
— Очень "низкий" уровень.
— Замедлит запуск приложения (время уйдёт на многократный запуск CSC).
— В случае перехода на новую версию .NET возможны проблемы.
Какие ещё — и + есть? По какому пути лучше пойти? У меня пока приоритеты такие: 3, 2, 1.
Но все эти варианты решения проблемы являются "заплаточными". Почему в ADO.NET этого не предусмотрели? Я не сомневаюсь в компетенции специалистов Microsoft. Видимо я чего-то не понимаю. Интересно, чего?- Помечено в качестве ответа Abolmasov Dmitry 17 ноября 2010 г. 10:14
18 марта 2010 г. 7:18 -
Остановился на варианте 2, т.к. не нашёл способа решения 3-го варианта.
30 апреля 2010 г. 10:51 -
не очень хорошо разбираюсь в оракл, но непонимаю почему нельзя просто заходить под разными логинами и не указывать имя схемы в тексте запросов pl/sql.13 сентября 2016 г. 12:41