Мастер обновления модели не работает с Npgsql и Visual Studio 2013 EntityFramework

В настоящее время мы используем Visual Studio 2012, EF 5.0 и Npgsql 2.0.12.0.

Я хотел бы перейти на Visual Studio 2013 и Npgsql 2.0.14.3 (сейчас я в порядке с EF 5.0).

В настоящее время мы используем мастер "Обновить модель", который принимает любые изменения в схеме и передает их в файл edmx, который просматривается в конструкторе VS. Мы делаем это, следуя неудобной процедуре использования DDEX в Npgsql.Provider2 и запуска "экспериментального" экземпляра Visual Studio.

Но это больше не работает в Visual Studio 2013 (после обновления созданных записей реестра). Также это не работает, если я изменю его DbProvider на Npgsql 2.0.14.3 в machine.config.

Было бы замечательно, если бы кто-то мог сказать мне, если они заставили это работать и как.

В качестве временной альтернативы я рассматриваю возможность обновления файла edmx из схемы с помощью edmgen.exe. До сих пор мне удавалось генерировать файлы.csdl,.ssdl и.mdl, но я не могу найти способ упаковать их все в файл.edmx. Кто-нибудь пробовал этот подход?

1 ответ

Решение

Для работы EF Designer необходим поставщик DDEX. Похоже, изначально провайдер DDEX был установлен только в вашей экспериментальной версии VS2012. При установке VS2013 у вас нет ключей реестра для поставщика DDEX, и EF Designer не может работать с вашей базой данных.

Edmx просто склеивает csdl msl и ssdl. Предполагая, что вы используете схемы v3 (т.е. ваш csdl находится в этом пространстве имен: xmlns="http://schemas.microsoft.com/ado/2009/11/edm") вы можете просто вставить содержимое файлов в этот шаблон (я добавил комментарии, какой файл должен быть вставлен куда):

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
        <!-- paste SSDL contents here -->
    </edmx:StorageModels>
    <!-- CSDL content -->
    <edmx:ConceptualModels>
        <!-- paste CSDL contents here -->
    </edmx:ConceptualModels>
    <!-- C-S mapping content -->
    <edmx:Mappings>
        <!-- paste MSL contents here -->
    </edmx:Mappings>
  </edmx:Runtime>
  <!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
  <edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
    <edmx:Connection>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
      </DesignerInfoPropertySet>
    </edmx:Connection>
    <edmx:Options>
      <DesignerInfoPropertySet>
        <DesignerProperty Name="ValidateOnBuild" Value="true" />
        <DesignerProperty Name="EnablePluralization" Value="True" />
        <DesignerProperty Name="CodeGenerationStrategy" Value="None" />
      </DesignerInfoPropertySet>
    </edmx:Options>
    <!-- Diagram content (shape and connector positions) -->
    <edmx:Diagrams>
    </edmx:Diagrams>
  </edmx:Designer>
</edmx:Edmx>
Другие вопросы по тегам