Avant le portage depuis EF6 vers EF Core : valider les exigences de votre ApplicationBefore porting from EF6 to EF Core: Validate your Application's Requirements

Avant de commencer le processus de portage, il est important de valider qu’EF Core répond à l’accès aux données pour votre application.Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application.

Fonctionnalités manquantesMissing features

Assurez-vous que EF Core possède toutes les fonctionnalités que vous devez utiliser dans votre application.Make sure that EF Core has all the features you need to use in your application. Consultez comparaison des fonctionnalités pour une comparaison détaillée de la fonctionnalité définie dans EF Core comparatif entre EF6.See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. Si toutes les fonctionnalités requises sont manquantes, vérifiez que vous pouvez pallier l’absence de ces fonctionnalités avant de porter vers EF Core.If any required features are missing, ensure that you can compensate for the lack of these features before porting to EF Core.

Changements de comportementBehavior changes

Il s’agit d’une liste non exhaustive de certaines modifications de comportement entre EF6 et EF Core.This is a non-exhaustive list of some changes in behavior between EF6 and EF Core. Il est important de garder ces pratiques comme votre port de votre application car elles peuvent changer la façon de votre application se comporte, mais n’apparaît pas comme des erreurs de compilation après le remplacement à EF Core.It is important to keep these in mind as your port your application as they may change the way your application behaves, but will not show up as compilation errors after swapping to EF Core.

Comportement DbSet.Add/Attach et graphDbSet.Add/Attach and graph behavior

Dans EF6, l’appel DbSet.Add() sur les résultats de l’entité dans une recherche récursive pour toutes les entités référencées dans ses propriétés de navigation.In EF6, calling DbSet.Add() on an entity results in a recursive search for all entities referenced in its navigation properties. Toutes les entités qui sont trouvent et ne sont pas suivies par le contexte, sont également être marqué comme ajouté.Any entities that are found, and are not already tracked by the context, are also be marked as added. DbSet.Attach() se comporte de la même, mais toutes les entités sont marquées comme inchangé.DbSet.Attach() behaves the same, except all entities are marked as unchanged.

EF Core effectue une recherche récursive similaire, mais avec certaines des règles légèrement différentes.EF Core performs a similar recursive search, but with some slightly different rules.

  • L’entité racine est toujours dans l’état requis (ajoutée pour DbSet.Add et inchangée pour DbSet.Attach).The root entity is always in the requested state (added for DbSet.Add and unchanged for DbSet.Attach).

  • Pour les entités qui se trouvent au cours de la recherche récursive des propriétés de navigation :For entities that are found during the recursive search of navigation properties:

    • Si la clé primaire de l’entité est généré de magasinIf the primary key of the entity is store generated

      • Si la clé primaire n’est pas définie sur une valeur, l’état est défini à ajouté.If the primary key is not set to a value, the state is set to added. La valeur de clé primaire est considérée comme « non définie » si elle est affectée à la valeur par défaut CLR pour le type de propriété (par exemple, 0 pour int, null pour string, etc..).The primary key value is considered "not set" if it is assigned the CLR default value for the property type (for example, 0 for int, null for string, etc.).

      • Si la clé primaire est définie sur une valeur, l’état a inchangé.If the primary key is set to a value, the state is set to unchanged.

    • Si la clé primaire n’est pas généré de base de données, l’entité est placée dans le même état que la racine.If the primary key is not database generated, the entity is put in the same state as the root.

Première initialisation de base de données de codeCode First database initialization

EF6 a beaucoup de magie qu’il effectue autour de la sélection de la connexion de base de données et de l’initialisation de la base de données. Certaines de ces règles sont les suivantes :EF6 has a significant amount of magic it performs around selecting the database connection and initializing the database. Some of these rules include:

  • Si aucune configuration n’est effectuée, EF6 sélectionne une base de données sur SQL Express ou LocalDb.If no configuration is performed, EF6 will select a database on SQL Express or LocalDb.

  • Si une chaîne de connexion avec le même nom que le contexte est dans les applications App/Web.config fichier, cette connexion est utilisée.If a connection string with the same name as the context is in the applications App/Web.config file, this connection will be used.

  • Si la base de données n’existe pas, il est créé.If the database does not exist, it is created.

  • Si aucune des tables à partir du modèle existent dans la base de données, le schéma pour le modèle actuel est ajouté à la base de données.If none of the tables from the model exist in the database, the schema for the current model is added to the database. Si les migrations sont activées, ils sont utilisés pour créer la base de données.If migrations are enabled, then they are used to create the database.

  • Si la base de données existe et EF6 avait précédemment créé le schéma, le schéma est vérifié pour assurer la compatibilité avec le modèle actuel.If the database exists and EF6 had previously created the schema, then the schema is checked for compatibility with the current model. Une exception est levée si le modèle a changé depuis que le schéma a été créé.An exception is thrown if the model has changed since the schema was created.

EF Core n’effectue aucun de cette commande magique.EF Core does not perform any of this magic.

  • La connexion de base de données doit être configurée de manière explicite dans le code.The database connection must be explicitly configured in code.

  • Aucune initialisation n’est effectuée.No initialization is performed. Vous devez utiliser DbContext.Database.Migrate() pour appliquer des migrations (ou DbContext.Database.EnsureCreated() et EnsureDeleted() pour créer ou supprimer de la base de données sans utiliser de migrations).You must use DbContext.Database.Migrate() to apply migrations (or DbContext.Database.EnsureCreated() and EnsureDeleted() to create/delete the database without using migrations).

Code tout d’abord une convention d’affectation de noms de tableCode First table naming convention

EF6 s’exécute le nom de classe d’entité via un service de pluralisation pour calculer le nom de table par défaut l’entité est mappée à.EF6 runs the entity class name through a pluralization service to calculate the default table name that the entity is mapped to.

EF Core utilise le nom de la DbSet propriété l’entité sur laquelle est exposée dans le contexte dérivé.EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. Si l’entité n’a pas un DbSet propriété, le nom de classe est utilisé.If the entity does not have a DbSet property, then the class name is used.