Mise à niveau de Entity Framework 5 à 6

Après la mise à niveau de notre projet depuis Entity Framework 5 vers Entity Framework 6 (même si la fonction de mise à jour de NuGets), l’erreur suivante apparaît dans la classe Entities générée:

Erreur 1 Le type ou le nom d’espace de noms ‘Objects’ n’existe pas dans l’espace de noms ‘System.Data’
(manque-t-il une référence d’assemblage?)

Je comprends que c’est parce que l’espace de noms a changé et que je peux corriger l’erreur manuellement en modifiant mes importations à partir de: using System.Data.Objects; et en using System.Data.Objects.DataClasses; Pour: using System.Data.Entity.Core.Objects;

Cependant, le fichier est généré, je dois donc 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.

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

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 .Context.tt du modèle .Context.tt et .tt . .tt 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 .

Ceci est mon expérience sur la façon de mettre à niveau avec succès Entity Framework v5 vers v6 pour:

  • Serveur SQL.
  • C # et Visual Studio 2012.
  • Base de données en premier

Acronymes:

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

Liste de contrôle:

  1. EF5 est intégré au kernel de .NET 4.5, alors que EF6 a été déplacé et est open source.
    • Cela signifie que vous devez append 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 fichier .dll “EntityFramework.dll”, alors que EF6 a deux fichiers .dll:
    • Cadre d’entité
    • EntityFramework.SqlServer
  3. EF6 nécessite des modifications à app.config. La meilleure façon d’apporter ces modifications consiste à cliquer avec le bouton droit sur la solution, à sélectionner «Gérer les packages NuGet pour la solution», à rechercher «EntityFramework» et à installer la version 6.1.0 d’Entity Framework dans tous les projets concernés, notamment 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 des références à EF5 et supprimez-les.
  5. Les espaces de noms ont changé:
    • Supprimez les lignes C # à l’ using System.Data.EntityClient; , qui est une référence EF5.
    • Ajoutez la ligne C # à l’ using System.Data.Entity.Core.EntityClient; qui est la bonne pour EF6.

Toujours coincé? Cette liste de contrôle est un wiki de communauté. N’hésitez pas à modifier cette liste de contrôle pour aider d’autres malheureux qui se heurtent encore au mur de briques qui peut être une configuration EF6.

Mise à jour 2016-02-15

Veuillez explorer d’autres options avant d’envisager EF. Il est 100 fois plus lent que les autres options, il est très compliqué pour ce qu’il offre, l’interface graphique de l’entité est pleine de bogues et présente des problèmes d’utilisabilité étranges, et nous allons devoir extraire tout notre code EF6 et le remplacer par quelque chose moins de 5 minutes pour faire une requête qui prend 5 secondes dans Dapper.