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.