Comparer EF Core et EF6
EF Core
Entity Framework Core (EF Core) est un mappeur de base de données objet moderne pour .NET. Il prend en charge les requêtes LINQ, le suivi des modifications, les mises à jour et les migrations de schéma.
EF Core fonctionne avec SQL Server/Azure SQL Database, SQLite, Azure Cosmos DB, MySQL, PostgreSQL et de nombreuses autres bases de données via un modèle de plug-in de fournisseur de base de données.
EF6
Entity Framework 6 (EF6) est un mappeur relationnel objet conçu pour .NET Framework, mais avec une prise en charge de .NET Core. EF6 est un produit stable et pris en charge, mais il n’est plus développé de façon active.
Comparaison des fonctionnalités
EF Core offre de nouvelles fonctionnalités qui ne seront pas implémentées dans EF6. Cependant, toutes les fonctionnalités de EF6 ne sont pas implémentées actuellement dans EF Core.
Les tableaux suivants comparent les fonctionnalités disponibles dans EF Core et EF6. Il s’agit d’une comparaison générale qui ne répertorie pas toutes les fonctionnalités et n’explique pas les différences entre la même fonctionnalité dans les différentes versions d’EF.
La colonne EF Core indique la version du produit dans laquelle la fonctionnalité a été introduite pour la première fois.
Création d’un modèle
Fonctionnalité | EF6.4 | EF Core |
---|---|---|
Mappage des classes de base | Oui | 1.0 |
Constructeurs avec des paramètres | 2.1 | |
Conversions de valeurs de propriété | 2.1 | |
Types mappés sans clé | 2.1 | |
Conventions | Oui | 1.0 |
Conventions personnalisées | Oui | 7.0 |
Annotations de données | Oui | 1.0 |
API Fluent | Oui | 1.0 |
Héritage : table par hiérarchie (TPH) | Oui | 1.0 |
Héritage : table par type (TPT) | Oui | 5,0 |
Héritage : table par classe concrète (TPC) | Oui | 7.0 |
Propriétés d’état de clichés instantanés | 1.0 | |
Clés secondaires | 1.0 | |
Navigations plusieurs-à-plusieurs | Oui | 5,0 |
Plusieurs-à-plusieurs sans entité de jonction | Oui | 5,0 |
Génération de clés : base de données | Oui | 1.0 |
Génération de clés : client | 1.0 | |
Types complexes/détenus | Oui | 2.0 |
Données spatiales | Oui | 2.2 |
Format de modèle : code | Oui | 1.0 |
Création d’un modèle à partir d’une base de données : ligne de commande | Oui | 1.0 |
Mise à jour d’un modèle à partir d’une base de données | Partial | Dans le journal des travaux en souffrance (#831) |
Filtres de requête globale | 2.0 | |
Fractionnement de table | Oui | 2.0 |
Fractionnement d'entité | Oui | 7.0 |
Mappage de fonctions scalaires de base de données | Médiocre | 2.0 |
Mappage de fonction table de base de données | Médiocre | 5.0 |
Mappages de champs | 1.1 | |
Types références Nullables (C# 8.0) | 3.0 | |
Visualisation graphique de modèle | Oui | Aucune prise en charge planifiée (1) |
Éditeur de modèle graphique | Oui | Aucune prise en charge planifiée (1) |
Format de modèle : EDMX (XML) | Oui | Aucune prise en charge planifiée (1) |
Création d’un modèle à partir d’une base de données : assistant VS | Oui | Aucune prise en charge planifiée (1) |
Interrogation des données
Fonctionnalité | EF6.4 | EF Core |
---|---|---|
Requêtes LINQ | Oui | 1.0 |
Code SQL généré lisible | Médiocre | 1.0 |
Traduction GroupBy | Oui | 2.1 |
Chargement des données associées : hâtif | Oui | 1.0 |
Chargement de données associées : chargement hâtif pour les types dérivés | 2.1 | |
Chargement des données associées : différé | Oui | 2.1 |
Chargement des données associées : explicite | Oui | 1.1 |
Requêtes SQL brutes : types d’entités | Oui | 1.0 |
Requêtes SQL brutes : types d’entités sans clé | Oui | 2.1 |
Requêtes SQL brutes : composition avec LINQ | 1.0 | |
Requêtes compilées explicitement | Médiocre | 2.0 |
await foreach (C# 8.0) | 3.0 | |
Langage de requête textuel (Entity SQL) | Oui | Aucune prise en charge planifiée (1) |
Enregistrement des données
Fonctionnalité | EF6.4 | EF Core |
---|---|---|
Suivi des modifications : instantané | Oui | 1.0 |
Suivi des modifications : notification | Oui | 1.0 |
Suivi des modifications : proxys | Oui | 5,0 |
État du suivi de l’accès | Oui | 1.0 |
Accès concurrentiel optimiste | Oui | 1.0 |
Transactions | Oui | 1.0 |
Traitement par lot d’instructions | 1.0 | |
Mappage de procédure stockée | Oui | 7.0 |
API de bas niveau à graphes déconnectés | Médiocre | 1.0 |
De bout en bout à graphes déconnectés | 1.0 (partielle ; #5536) |
Autres fonctionnalités
Fonctionnalité | EF6.4 | EF Core |
---|---|---|
Migrations | Oui | 1.0 |
API de création/suppression de base de données | Oui | 1.0 |
Données seed | Oui | 2.1 |
Résilience de connexion | Oui | 1.1 |
Intercepteurs | Oui | 3.0 |
Événements | Oui | 3.0 (partielle ; #626) |
Journalisation simple (Database.Log) | Oui | 5,0 |
Regroupement DbContext | 2.0 |
Fournisseurs de bases de données (2)
Fonctionnalité | EF6.4 | EF Core |
---|---|---|
SQL Server | Oui | 1.0 |
MySQL | Oui | 1.0 |
PostgreSQL | Oui | 1.0 |
Oracle | Oui | 1.0 |
SQLite | Oui | 1.0 |
SQL Server Compact | Oui | 1.0 (3) |
DB2 | Oui | 1.0 |
Firebird | Oui | 2.0 |
Jet (Microsoft Access) | 2.0 (3) | |
Azure Cosmos DB | 3.0 | |
In-memory (pour les tests) | 1.0 |
1 Certaines fonctionnalités EF6 ne seront pas implémentées dans EF Core. Ces fonctionnalités dépendent de l’Entity Data Model (EDM) sous-jacent de EF6 et/ou constituent des fonctionnalités complexes avec un retour sur investissement relativement faible. Vos commentaires sont toujours les bienvenus, mais même si EF Core permet d’effectuer de nombreuses opérations irréalisables dans EF6, à l'inverse, EF Core ne prend pas en charge toutes les fonctionnalités de EF6.
2 Les fournisseurs de bases de données EF Core implémentés par des tiers peuvent être retardés lors de la mise à jour vers de nouvelles versions majeures de EF Core. Consultez Fournisseurs de bases de données pour plus d’informations.
3 Les fournisseurs SQL Server Compact et Jet fonctionnent uniquement sur le .NET Framework (et non sur .NET Core).
Plateformes prises en charge
EF Core 3.1 s’exécute sur .NET Core et .NET Framework, à l’aide de .NET Standard 2.0. Toutefois, EF Core 5.0 ne s’exécute pas sur .NET Framework. Consultez Plateformes pour plus d’informations.
EF 6.4 s’exécute sur .NET Core et .NET Framework, via le multi-ciblage.
Conseils pour les nouvelles applications
Utilisez EF Core sur .NET Core pour toutes les nouvelles applications, sauf si l’application a besoin d’une fonctionnalité uniquement prise en charge sur .NET Framework.
Conseils pour les applications EF6 existantes
EF Core n’est pas un remplacement immédiat de EF6. Le passage de EF6 à EF Core nécessitera probablement des modifications de votre application.
Lors du déplacement d’une application EF6 vers .NET Core :
- Continuez à utiliser EF6 si le code d’accès aux données est stable et n’est pas susceptible d’évoluer ou de nécessiter de nouvelles fonctionnalités.
- Effectuez un portage vers EF Core si le code d’accès aux données est en cours d’évolution ou si l’application a besoin de nouvelles fonctionnalités uniquement disponibles dans EF Core.
- Le portage vers EF Core est également souvent effectué pour améliorer les performances. Toutefois, tous les scénarios n’étant pas forcément plus rapides, procédez d’abord à un profilage.
Pour plus d’informations, consultez Portage d’EF6 vers EF Core.