web-dev-qa-db-fra.com

L'assistant de mise à jour ne répond pas

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).

37
Santhos

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
77
Santhos

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.

20
Bradley Mountford

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.

2
sparkyShorts

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.

1
jens

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?!

1
DMadden51

Solution manuelle léthargique MariaDB

  • En utilisant EF6, VisualStudio 2015 contre MariaDB 10.2.
  • Tout comme @Santhos l'a indiqué, épuisant une tonne de temps pour moi. On dirait que VisualStudio est lent à analyser cet énorme fichier XML ( ma machine de développement n'a que 8 Go de RAM ). Pas de blague, environ 15 minutes pour se rafraîchir.
  • J'ai appris que manuellement 'réinitialisation' quelques fichiers, puis en procédant à la mise à jour de l'interface graphique, je m'éloignais rapidement. Je suis dedans et dehors avec de nouveaux modèles brillants ~ 1-2 minutes.

Étapes de rafraîchissement manuel

  1. Remplacez le contenu de votre .edmx.diagram fichier avec EDMX Diagram Boilerplate ci-dessous
  2. Remplacez le contenu de votre .edmx fichier avec EDMX Runtime Boilerplate ci-dessous
  3. Revenez à VisualStudio, double-cliquez sur votre EDMX> dans le clic droit sur l'écran vide> Mettre à jour les modèles à partir de la base de données

Plaque de chaudière de diagramme EDMX

<?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>

Plaque de chaudière EDMX Runtime

<?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>
0
fusion27