В настоящее время мы используем 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. Кто-нибудь пробовал такой подход?

0
sevzas 9 Янв 2014 в 01:40

1 ответ

Лучший ответ

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

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>
0
Pawel 10 Янв 2014 в 01:21