web-dev-qa-db-fra.com

Mise à niveau d'Entity Framework 5 vers 6

Après avoir mis à niveau notre projet à partir de Entity Framework 5 vers Entity Framework 6 (bien que la fonction de mise à jour de NuGets), j'obtiens l'erreur suivante sur ma classe d'entités générée:

Erreur 1 Le nom de type ou d'espace de noms "Objets" n'existe pas dans l'espace de noms "System.Data"
(vous manque une référence d'assemblage?)

Je comprends que cela est dû au fait que l'espace de noms a changé et je peux corriger l'erreur manuellement en changeant mes importations depuis: using System.Data.Objects; et using System.Data.Objects.DataClasses; À: using System.Data.Entity.Core.Objects;

Cependant, le fichier est généré, j'ai donc besoin de réappliquer ce correctif après chaque Update model from Database. Y a-t-il quelque chose de plus à changer pour que EF génère le modèle sans cette erreur.

40
RossBille

Je pense que votre problème est que vos modèles T4, qui génèrent les entités et le contexte, sont toujours dans EF version 5.

Vous devez d'abord supprimer les éléments de génération de code actuels, qui se trouvent dans le code derrière le modèle, à savoir <Modelname>.Context.tt et <Modelname>.tt. Ensuite, ajoutez un nouveau générateur de code EF version 6 avec Right click in the model designer-> Add Code Generation Item ... -> EF 6.x DbContext Generator.

62
boindiil

Voici mon expérience sur la mise à niveau réussie d'Entity Framework v5 vers v6 pour:

  • Serveur SQL.
  • C # et Visual Studio 2012.
  • Base de données d'abord.

Acronymes:

  • EF5 = Entity Framework v5.
  • EF6 = Entity Framework v6.

Liste de contrôle:

  1. EF5 est intégré au cœur de .NET 4.5, tandis que EF6 a été déplacé et est open source.
    • Cela signifie que vous devez ajouter les nouveaux assemblages EF6 à tous les projets pertinents de la solution, en particulier le projet d'entrée.
    • Cela signifie que vous devez supprimer Assembly System.Entity de tous les projets, car cela fait référence à EF5.
  2. EF5 a un seul .dll "EntityFramework.dll", tandis que EF6 a deux .dll:
    • Cadre d'entité
    • EntityFramework.SqlServer
  3. EF6 nécessite des modifications dans app.config. La meilleure façon d'apporter ces modifications est de cliquer avec le bouton droit sur la solution, de sélectionner "Gérer les packages NuGet pour la solution", de rechercher "EntityFramework" et d'installer la version 6.1.0 d'Entity Framework dans tous les projets pertinents, en particulier le projet d'entrée. Assurez-vous de désinstaller tous les packages NuGet pour EF5 Framework de tous les projets. Cela mettra automatiquement à jour vos fichiers app.config afin qu'ils soient corrects.
  4. Examinez tous les fichiers app.config pour les références à EF5 et supprimez-les.
  5. Les espaces de noms ont changé:
    • Supprimer les lignes C # using System.Data.EntityClient;, qui est une référence EF5.
    • Ajouter une ligne C # using System.Data.Entity.Core.EntityClient; qui est correct pour EF6.

Toujours coincé? Cette liste de contrôle est un wiki communautaire, n'hésitez pas à modifier cette liste de contrôle pour aider d'autres âmes malheureuses qui se cognent toujours la tête contre le mur de briques qui peut être une configuration EF6.

Mise à jour 2016-02-15

Veuillez explorer d'autres options avant d'envisager EF. C'est 100 fois plus lent que les autres options, c'est beaucoup plus compliqué pour ce qu'il offre, l'interface graphique de l'entité est pleine de bugs et a des problèmes d'utilisation étranges, et nous allons devoir extraire tout notre code EF6 et le remplacer par quelque chose qui prend moins de 5 minutes pour effectuer une requête qui prend 5 secondes dans Dapper.

37
Contango