Mise à niveau sur Entity Framework 6
Dans les versions précédentes d’EF, le code est divisé entre les bibliothèques principales (principalement System.Data.Entity.dll) fournies dans le cadre du .NET Framework et les bibliothèques hors-bande (principalement EntityFramework.dll) fournies dans un package NuGet. EF6 prend le code des bibliothèques principales et l’incorpore dans les bibliothèques hors-bande. Cela est nécessaire pour permettre à EF d’être rendu open source et pour qu’il puisse évoluer à un rythme différent de .NET Framework. Il en résulte que des applications doivent être reconstruites par rapport aux types déplacés.
Cela devrait être simple pour les applications qui utilisent DbContext tel que fourni dans EF 4.1 et les versions ultérieures. Un peu plus d’effort est nécessaire pour les applications qui utilisent ObjectContext, mais ce n’est toujours pas une tâche difficile.
Voici une liste de contrôle des actions à effectuer pour mettre à niveau une application existante vers EF6.
1. Installer le package NuGet EF6
Vous devez vous mettre à niveau sur le nouveau runtime Entity Framework 6.
- Cliquez avec le bouton droit sur votre projet et sélectionnez Gérer les packages NuGet...
- Sous l’onglet En ligne, sélectionnez EntityFramework, puis cliquez sur Installer
Remarque
Si une version précédente du package NuGet EntityFramework est installée, elle sera mise à niveau sur EF6.
Vous pouvez également exécuter la commande suivante dans la console du gestionnaire de package :
Install-Package EntityFramework
2. Veiller à ce que les références d’assembly à System.Data.Entity.dll soient supprimées
L’installation du package NuGet EF6 devrait supprimer automatiquement toutes les références à System.Data.Entity de votre projet à votre place.
3. Échanger n’importe quel modèle EF Designer (EDMX) pour utiliser la génération de code EF 6.x
Si vous avez des modèles créés avec EF Designer, vous devez mettre à jour les modèles de génération de code pour générer du code compatible avec EF6.
Remarque
Pour le moment, uniquement les modèles EF 6.x DbContext Generator sont disponibles pour Visual Studio 2012 et 2013.
Supprimez les modèles existants de génération de code. Ces fichiers sont généralement nommés suivant les formats <edmx_file_name>.tt et <edmx_file_name>.Context.tt. Ils sont imbriqués sous votre fichier edmx dans l’Explorateur de solutions. Vous pouvez sélectionner les modèles dans l’Explorateur de solutions et appuyer sur la touche Suppr pour les supprimer.
Remarque
Dans les projets de site web, les modèles ne sont pas imbriqués sous votre fichier edmx, mais répertoriés à côté de lui dans l’Explorateur de solutions.
Remarque
Dans les projets VB.NET, vous devez activer « Afficher tous les fichiers » pour pouvoir afficher les fichiers de modèle imbriqués.
Ajoutez le modèle de génération de code EF 6.x approprié. Ouvrez votre modèle dans EF Designer, cliquez avec le bouton droit sur la surface de conception et sélectionnez Ajouter un élément de génération de code...
Si vous utilisez l’API DbContext (recommandée), EF 6.x DbContext Generator sera disponible sous l’onglet Données.
Remarque
Si vous utilisez Visual Studio 2012, vous devez installer EF 6 Tools pour avoir accès à ce modèle. Pour plus d’informations, consultez Obtenir Entity Framework.
Si vous utilisez l’API ObjectContext, vous devez sélectionner l’onglet En ligne et rechercher EF 6.x EntityObject Generator.
Si vous avez appliqué des personnalisations aux modèles de génération de code, vous devez les réappliquer aux modèles mis à jour.
4. Mettre à jour les espaces de noms pour tous les types EF principaux utilisés
Les espaces de noms pour les types DbContext et Code First n’ont pas changé. Cela signifie que vous n’aurez pas besoin de modifier quoi que ce soit pour de nombreuses applications qui utilisent EF 4.1 ou une version ultérieure.
Les types comme ObjectContext qui étaient précédemment dans System.Data.Entity.dll sont déplacés vers de nouveaux espaces de noms. Cela signifie que vous devez peut-être mettre à jour vos directives using ou import pour générer contre EF6.
La règle générale pour les modifications d’espace de noms est que n’importe quel type dans System.Data.* est déplacé vers System.Data.Entity.Core.*. En d’autres termes, insérez simplement Entity.Core. après System.Data. Par exemple :
- System.Data.EntityException => System.Data.Entity.Core.EntityException
- System.Data.Objects.ObjectContext => System.Data.Entity.Core.Objects.ObjectContext
- System.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core.Objects.DataClasses.RelationshipManager
Ces types se trouvent dans les espaces de noms Core, car ils ne sont pas directement utilisés pour la plupart des applications basées sur DbContext. Certains types qui faisaient partie de System.Data.Entity.dll continuent d’être utilisés couramment et directement pour les applications basées sur DbContext. Ils ne sont donc pas déplacés dans les espaces de noms Core. Ces règles sont les suivantes :
- System.Data.EntityState => System.Data.Entity.EntityState
- System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute
Remarque
Cette classe est renommée—une classe portant l’ancien nom existe et fonctionne toujours, mais elle est désormais marquée comme obsolète.
- System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions
Remarque
Cette classe est renommée—une classe portant l’ancien nom existe et fonctionne toujours, mais elle est désormais marquée comme obsolète.)
- Les classes spatiales (par exemple, DbGeography, DbGeometry) sont déplacées de System.Data.Spatial => System.Data.Entity.Spatial
Remarque
Certains types dans l’espace de noms System.Data se trouvent dans System.Data.dll qui n’est pas un assembly EF. Ces types ne sont pas déplacés et leurs espaces de noms restent inchangés.