Portage d'un modèle basé sur code EF6 vers EF Core

Si vous avez lu toutes les mises en garde et que vous êtes prêt à effectuer un portage, voici quelques conseils pour vous aider à démarrer.

Installer des packages NuGet EF Core

Pour utiliser EF Core, vous installez le package NuGet pour le fournisseur de base de données que vous souhaitez utiliser. Par exemple, installez Microsoft.EntityFrameworkCore.SqlServer lorsque vous ciblez SQL Server. Consultez Fournisseurs de bases de données pour plus d’informations.

Si vous envisagez d’utiliser des migrations, vous devez également installer le package Microsoft.EntityFrameworkCore.Tools.

Vous pouvez conserver l’installation du package NuGet EF6 (EntityFramework), car EF Core et EF6 peuvent être utilisés côte à côte dans la même application. Toutefois, si vous n'envisagez pas d'utiliser EF6 dans votre application, la désinstallation du package permettra de produire des erreurs de compilation sur des éléments de code qui méritent de l’attention.

Échanger des espaces de noms

La plupart des API que vous utilisez dans EF6 se trouvent dans l'espace de noms System.Data.Entity (et dans les sous-espaces de noms associés). La première modification de code consiste à échanger vers l’espace de noms Microsoft.EntityFrameworkCore. En général, vous démarrez avec votre fichier de code de contexte dérivé, puis vous travaillez à partir de là en résolvant les erreurs de compilation à mesure qu’elles se produisent.

Configuration du contexte (connexion, etc.)

Comme décrit dans configuration de la connexion de base de données, EF Core est moins magique pour détecter la base de données à laquelle se connecter. Vous devez écraser la méthode OnConfiguring dans votre contexte dérivé et utiliser l’API spécifique du fournisseur de base de données pour configurer la connexion à la base de données.

La plupart des applications EF6 stockent la chaîne de connexion dans le fichier d’applications App/Web.config. Dans EF Core, vous lisez cette chaîne de connexion à l’aide de l'API ConfigurationManager. Vous devez peut-être ajouter une référence à l’assembly d’infrastructure System.Configuration pour pouvoir utiliser cette API.

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
    }
}

Mettre à jour votre code

À ce stade, il s'agit de traiter les erreurs de compilation et d'examiner le code pour voir si les modifications de comportement auront un effet sur vous.

Migrations existantes

Il n’existe pas vraiment de moyen pratique pour porter des migrations EF6 existantes vers EF Core.

Si possible, il est préférable de supposer que toutes les migrations précédentes à partir d’EF6 ont été appliquées à la base de données, puis de commencer à migrer le schéma à partir de ce moment à l’aide d’EF Core. Pour ce faire, vous devez utiliser la commande Add-Migration pour ajouter une migration une fois que le modèle est porté vers EF Core. Vous supprimez ensuite tout le code des méthodes Up et Down de la migration générée automatiquement. Les migrations suivantes sont comparées au modèle lorsque cette première migration a été générée automatiquement.

Tester le port

La réussite de la compilation de votre application ne signifie pas pour autant que sont portage vers EF Core a réussi. Vous devez tester toutes les zones de votre application pour vous assurer qu'aucun des changements de comportement n'a eu d'impact négatif sur votre application.

Enfin, passez en revue les cas détaillés à prendre en compte lors du portage pour obtenir des conseils supplémentaires sur des cas et des scénarios spécifiques dans votre code.