Волшебник «Обновление модели» не работает с NPGSQL и Visual Studio 2013 EntityFramework
-
21-12-2019 - |
Вопрос
В настоящее время мы используем Visual Studio 2012, EF 5.0 и NPGSQL 2.0.12.0.
Я хотел бы обновить до Visual Studio 2013 и NPGSQL 2.0.14.3 (я в порядке с EF 5.0 на данный момент).
В настоящее время мы используем мастер «модели обновления», который принимает любые изменения в схеме и подают их в файл EDMX, который просматривается в VS Designer. Мы делаем это, следуя неловкой процедуре использования DDEX в NPGSQL.Provider2 и запустите «экспериментальный» экземпляр Visual Studio.
Но это больше не работает в Visual Studio 2013 (после обновления созданных записей реестра). Также это не работает, если я изменим он DbProvider в NPGSQL 2.0.14.3 в Machine.config.
Было бы выдающимся, если бы кто-то мог сказать мне, если они получили это на работу и как.
как временная альтернатива, я рассматриваю возможность обновления файла EDMX из схемы с помощью EDMGEN.exe. Пока что я смог создать файлы .csdl, .ssdl и .mdl, но я не могу найти способ упаковать всеми из них в файл .edmx. Кто-нибудь пробовал этот подход?
Решение
Дизайнер EF нуждается в провайдере DDEX для работы.Похоже, изначально провайдер DDEX был установлен только в вашей экспериментальной версии VS2012.Когда вы устанавливаете VS2013, у вас нет ключей реестра для поставщика DDEX, а Designer EF не может работать с вашей базой данных.
EDMX просто склеивает CSDL MSL и SSDL.Предполагая, что вы используете Schemas 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>
.