Можно ли изменить способ создания необработанного файла .edmx в Entity Framework 5

Я использую подход 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");
}

но я считаю, что это действительно только решение для кода.


person Dylan Hayes    schedule 17.02.2015    source источник


Ответы (1)


Вам удалось изменить его? Думали ли вы о создании независимого соединения вместо того, чтобы пытаться изменить файлы? взгляните на эту ссылку от Сергея Барского .

В файле веб-конфигурации есть 3 ссылки: csdl — представляет концептуальную схему; msl — для перевода запросов .net в команды базы данных; ssdl — содержит информацию о RDBM

Все три схемы компилируются для создания DLL модели.

Автор создает две модели (одну для Oracle и другую для SQL), а затем динамически переключается с одной на другую.

person Turay Melo    schedule 17.02.2015
comment
да, похоже, это не то, чего я пытаюсь достичь. Это интересный способ достижения целей, но я ищу способ изменить одну модель, поскольку они абсолютно идентичны, и это скорее недостаток инфраструктуры Entity, поскольку у них нет встроенной поддержки для этого небольшого нюанса оракула. это так важно. - person Dylan Hayes; 17.02.2015