Chaque fois que j'ai besoin de mettre à jour mon emdx à partir de la base de données, l'assistant de mise à jour prend un temps incroyable pour le faire, se rendant comme ne répondant pas une fois que vous avez appuyé sur le bouton Terminer (comme terminer la mise à jour).
J'utilise Visual Studio 2015 et LocalDb SQL Server 2014. Certaines personnes ont suggéré d'installer le Service Pack 1 pour résoudre le problème. J'ai installé le SP1 pour LocalDb, mais cela n'a pas aidé. Mon installation de VS2015 est également assez récente.
J'ai la dernière version d'Entity Framework 6 (de nuget).
La définition du niveau de compatibilité de la base de données à 110 a fonctionné pour moi.
Pour vérifier le niveau de compatibilité, exécutez ce script:
select compatibility_level from sys.databases where name = '<YOUR_DB_NAME>'
Pour définir le niveau de compatibilité, utilisez ce script:
alter database <YOUR_DB_NAME> set compatibility_level = 110
L'exécution de ce qui suit sur la base de données a fonctionné pour moi:
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=ON
Ensuite, après la mise à jour, réinitialisez-la en utilisant:
ALTER DATABASE SCOPED CONFIGURATION SET LEGACY_CARDINALITY_ESTIMATION=OFF
C'est par ce fil au repo EF6 sur Github.
Il convient de noter que ce qui suit est également signalé dans ce thread pour fonctionner, même si je ne l'ai pas testé car le premier a si bien fonctionné pour moi:
UPDATE STATISTICS sys.syscolpars
UPDATE STATISTICS sys.sysschobjs
UPDATE STATISTICS sys.syssingleobjrefs
UPDATE STATISTICS sys.sysiscols
Ils ont également renvoyé cela à l'équipe SQL Server et ouvert ce problème sur Microsoft Connect.
Aujourd'hui, mes collègues et moi avons laissé l'assistant tranquille et l'avons mis à jour pendant environ 10 minutes. Bien qu'il ait fallu un certain temps, il s'est terminé. C'est la meilleure solution pour nous (pour l'instant), car nous ne pouvons pas définir le niveau de compatibilité de notre base de données sans les autorisations appropriées.
Changer le niveau de compatibilité SQL Server ou l'indicateur de trace 9481 n'est pas une option pour moi.
J'ai essayé EntityFramework Reverse POCO Generator .
https://visualstudiogallery.msdn.Microsoft.com/ee4fcff9-0c4c-4179-afd9-7a2fb90f5838
C'est un modèle T4 générique configurable et fonctionne très bien jusqu'à présent.
Il a même une option pour l'indicateur de trace mentionné
IncludeQueryTraceOn9481Flag = false; // Si SqlServer 2014 semble figé/prend du temps lorsque ce fichier est enregistré, essayez de le définir sur true (vous aurez également besoin de privilèges élevés).
Ironiquement, cela fonctionne rapidement même si le drapeau est désactivé :) On dirait qu'ils utilisent des requêtes de métadonnées différentes par rapport à VS EF Designer.
J'ai encore dû le faire avec Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) - 12.0.5207.0 (X64) Jul 3 2017 02:25:44 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
en utilisant Entity Framework 6.2.0. Comment diable cela n'a-t-il pas encore été résolu?!
.edmx.diagram
fichier avec EDMX Diagram Boilerplate ci-dessous.edmx
fichier avec EDMX Runtime Boilerplate ci-dessous<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.Microsoft.com/ado/2009/11/edmx">
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.Microsoft.com/ado/2009/11/edmx">
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="820459acb0f543cfaf7db8643f38c2d6" Name="Diagram1" ZoomLevel="85">
</Diagram>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>
<?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>
<Schema Namespace="ShareDirectModel.Store" Provider="MySql.Data.MySqlClient" ProviderManifestToken="5.5" Alias="Self" xmlns:store="http://schemas.Microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.Microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.Microsoft.com/ado/2009/11/edm/ssdl">
<EntityContainer Name="ShareDirectModelStoreContainer">
</EntityContainer>
</Schema></edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="ShareDirectModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.Microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.Microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.Microsoft.com/ado/2009/11/edm">
<EntityContainer Name="ShareDirectContext" annotation:LazyLoadingEnabled="true">
</EntityContainer>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.Microsoft.com/ado/2009/11/mapping/cs">
<EntityContainerMapping StorageEntityContainer="ShareDirectModelStoreContainer" CdmEntityContainer="ShareDirectContext">
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<Designer xmlns="http://schemas.Microsoft.com/ado/2009/11/edmx">
<Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</Connection>
<Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="true" />
<DesignerProperty Name="IncludeForeignKeysInModel" Value="true" />
<DesignerProperty Name="UseLegacyProvider" Value="false" />
<DesignerProperty Name="CodeGenerationStrategy" Value="None" />
<DesignerProperty Name="DDLGenerationTemplate" Value="$(VSEFTools)\DBGen\SSDLToMySQL.tt" />
</DesignerInfoPropertySet>
</Options>
<!-- Diagram content (shape and connector positions) -->
<Diagrams></Diagrams>
</Designer>
</edmx:Edmx>