Avant de porter à partir de EF6 vers EF Core : valider des 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 vérifier qu’EF Core respecte les conditions d’accès de 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 différence entre la fonctionnalité définie dans EF Core à 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 compenser 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 n’oubliez pas que votre port votre application car elles peuvent changer la façon de votre application se comporte, mais pas apparaîtront en tant qu’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 de DbSet.Add/Attach et de graphiqueDbSet.Add/Attach and graph behavior

Dans EF6, appelant DbSet.Add() sur les résultats dans une recherche récursive pour toutes les entités référencées dans ses propriétés de navigation pour une entité.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 trouvées 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 non modifié.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é 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 sont détectés lors 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 à 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é comme « non définie » si elle est affectée à la valeur par défaut CLR pour le type de propriété (c'est-à-dire 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 (i.e. 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 une quantité importante de magic 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 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 se trouve dans les applications App/Web.config fichier, cette connexion sera 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 précédemment créée 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 été modifié 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 cet aspect le plus 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 la création/suppression de la base de données sans l’utilisation 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 exécute le nom de la classe d’entité via un service de pluralisation pour calculer le nom de table par défaut que 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é de 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.