Мастер обновления модели не работает с 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>