Я использую подход Entity Framework 5.0 DB-First в приложении Asp.Net 5 MVC для подключения к базе данных оракула. Все отлично работает с базой данных, для которой я создал свою модель данных EF, но у меня есть 3 разных (идентичных) среды с настройками _PROD, _UAT и _DEV.
У меня есть настройка преобразования конфигурации, чтобы указать на соответствующую среду, для которой я развертываю. Проблема в том, что как только я переключаю строки подключения на другую схему («базу данных» для пользователей sql), она создает
ORA-00942: table or view does not exist
После нескольких часов ковыряния я понял, почему. Посмотрев на необработанный файл кода .edmx, я обнаружил, что дизайнер применяет имя схемы («база данных» для пользователей sql) ко всем сущностям в узле контейнера сущностей, обратите внимание на REV_ALLOC_DEV ниже.
<EntityContainer Name="ModelStoreContainer">
<EntitySet Name="LOG_EVENTS" EntityType="Self.LOG_EVENTS" Schema="REV_ALLOC_DEV" store:Type="Tables" />
<EntitySet Name="PAGE_LOCK" EntityType="Self.PAGE_LOCK" Schema="REV_ALLOC_DEV" store:Type="Tables" />
<!-- Bunch more entities... -->
</EntityContainer>
Если я войду и вручную изменю файл, чтобы удалить это имя схемы из всех объектов в контейнере сущностей, «а также в нескольких других местах, где есть некоторые необработанные операторы выбора sql», тогда все между несколькими базами данных работает как чемпион
Итак, мой вопрос: Есть ли какой-либо способ изменить способ создания дизайнером необработанного .edmx xml, возможно, с помощью файла .tt или чего-то подобного, чтобы я мог автоматически удалить схему? ("база данных" для пользователей sql) имя добавлено.
Также в качестве примечания: в свойствах дизайнера .edmx я уже знаю о свойстве имени схемы базы данных, в настоящее время для которого установлено значение dbo, которое, как я вижу, фактически просто закрывает свойство defaultdatabschema в файле .edmx. пример ниже. Возможно, есть способ установить это для каждой среды, чтобы считывать значение SchemaName из моих преобразованных конфигураций, но мне интересно, ориентировано ли это свойство в первую очередь на схему SQL, а не на схему оракула, поэтому я был более склонен попытаться найти ответ на мой вопрос выше.
<DesignerProperty Name="DefaultDatabaseSchema" Value="" />
Еще одно замечание. Я видел много ссылок на:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("MyDefaultDbSchema");
}
но я считаю, что это действительно только решение для кода.