web-dev-qa-db-fra.com

Mettre à niveau EF 4 EDMX vers EF 6

Mon application utilise d'abord une base de données EDMX dans EF 4. Je voudrais tout mettre à niveau vers EF 6. Après avoir obtenu EF 6 avec NuGet, j'ai dû apporter de nombreuses modifications à mes classes qui utilisent mon modèle EF, car les espaces de noms ont été changé dans EF 6. Ensuite, j'ai réalisé que le code généré par mon EDMX utilise également les mauvais espaces de noms, etc. Je n'utilise pas de T4 personnalisé jusqu'à présent.

Comment pourrais-je mettre à niveau mon EDMX existant vers EF 6.

Je vous remercie.

45
SolarX
  1. Vous supprimez vos anciens fichiers .tt
  2. Vous ouvrez votre fichier edmx en mode designer (pour voir votre modèle)
  3. Clic droit sur un espace libre
  4. Sélectionnez Ajouter un élément de génération de code
  5. Dans la boîte de dialogue, sélectionnez "EF 6.x DbContext Code Generation Item" (quelque chose comme ça)
  6. Enregistrez votre edmx et toutes les classes seront générées pour vous, avec les nouveaux espaces de noms, etc.
56
Rand Random

En plus des réponses données ici par Rand Random et Dean Oliver, permettez-moi de mentionner ce qui suit Lien MSDN , décrivant les étapes générales pour la mise à niveau vers EF6. Ne sous-estimez pas les étapes manuelles requises ...

La feuille de route est (voir détails dans le lien ci-dessus):

  1. Préparation: Installez les outils Entity Framework 6 pour Visual Studio 2012/13

  2. Installez le package EF6 NuGet

  3. Assurez-vous que les références d'assembly à System.Data.Entity.dll sont supprimées (Remarque: l'installation du package EF6 NuGet doit supprimer automatiquement toutes les références à System.Data. Entité de votre projet pour vous).

  4. Échangez tous les modèles EF Designer (EDMX) pour utiliser la génération de code EF 6.x .

    Remarques:

    • Si vous obtenez le message "Le concepteur de modèle de données d'entité ne peut pas afficher le fichier que vous avez demandé" par la suite, cliquez sur le lien modifier dans le message texte affiché "L'entité Data Model Designer ... Vous pouvez modifier ...", qui affichera les tableaux. Tout sélectionner avec Ctrl+A, puis appuyez Del, puis cliquez avec le bouton droit et sélectionnez "Mettre à jour le modèle à partir de la base de données", et enfin enregistrez en utilisant Ctrl+S. Cela mettra à jour le modèle vers la dernière version en utilisant le modèle T4 par défaut "EF 6.x DbContext Generator".

    • Si vous avez utilisé ObjectContext dans votre projet, alors vous devriez envisager de télécharger le modèle "EF 6.x EntityObject Generator" . Cliquez ensuite avec le bouton droit dans le concepteur de modèle, choisissez "Ajouter un élément de génération de code", puis choisissez un nom que vous n'avez pas encore utilisé. Il générera les bonnes classes, ensuite vous devrez supprimer tous les anciens ("*.tt ") et la classe générée associée (" *.cs") des dossiers.

  5. Mettre à jour les espaces de noms pour tous types EF principaux utilisés, c.-à-d.

    • tout type dans System.Data.* est déplacé vers System.Data.Entity.Core.*
    • System.Data.EntityState => System.Data.Entity.EntityState
    • System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute.
      Remarque: Cette classe a été renommée; une classe avec l'ancien nom existe toujours et fonctionne, mais elle est maintenant marquée comme obsolète.
    • System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions.
      Remarque: Cette classe a été renommée; une classe avec l'ancien nom existe toujours et fonctionne, mais elle est maintenant marquée comme obsolète.
    • Les classes spatiales (par exemple DbGeography, DbGeometry) sont passées de
      System.Data.Spatial => System.Data.Entity.Spatial

N.B.:

29
Matt

Ainsi que les étapes suggérées par Rand Random. N'oubliez pas d'installer Entity Framework 6 Tools pour Visual Studio 2012 si vous utilisez VS2012. télécharger ici

Cela garantira que le modèle EF 6.x DbContext Generator s'affiche lorsque vous cliquez sur Étape 4: Ajouter un élément de génération de code

13
dean oliver