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.
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
.
Voici mon expérience sur la mise à niveau réussie d'Entity Framework v5 vers v6 pour:
Acronymes:
Liste de contrôle:
using System.Data.EntityClient;
, qui est une référence EF5.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.
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.