Migrations de bases de données en C# (.NET) : Entity Framework, FluentMigrator et autres approches

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Migrations de bases de données en C# (.NET) : Guide complet



La gestion des modifications du schéma de la base de données est une tâche cruciale lors du développement de toute application en C# (.NET). Les migrations permettent de versionner, suivre et appliquer automatiquement les changements de structure de la BD (ajout de tables, colonnes, index) de manière synchrone avec le code de l'application. Dans l'écosystème .NET, il existe plusieurs outils matures pour cette tâche. Dans cet article, nous allons détailler trois approches principales : le mécanisme intégré Entity Framework Core, les bibliothèques spécialisées FluentMigrator et DbUp.



1. Entity Framework Core Migrations (EF Core)



La méthode la plus populaire pour les projets utilisant déjà l'ORM Entity Framework Core. Les migrations sont étroitement intégrées à votre modèle de données (approche Code-First).



Installation et configuration

Pour travailler avec les migrations, vous devez installer le package :

dotnet add package Microsoft.EntityFrameworkCore.Tools


Création et application d'une migration

Après avoir modifié vos modèles C# (par exemple, en ajoutant une nouvelle propriété Email à la classe User), exécutez dans le terminal :

dotnet ef migrations add AddEmailToUserdotnet ef database update

La première commande crée un fichier de migration avec du code C# généré automatiquement. La seconde l'applique à votre base de données.



Exemple de code de migration (fichier généré) :

public partial class AddEmailToUser : Migration{    protected override void Up(MigrationBuilder migrationBuilder)    {        migrationBuilder.AddColumn<string>(            name: "Email",            table: "Users",            type: "nvarchar(200)",            nullable: true);    }

protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "Email", table: "Users"); }}

La méthode Up applique les modifications, Down les annule.



Avantages et inconvénients des migrations EF Core

  • Avantages : Intégration étroite avec les modèles, génération automatique de code, prise en charge des annulations, intégrée dans l'écosystème .NET.
  • Inconvénients : Dépendance à EF Core, complexité pour les modifications non triviales (ex. renommage de colonnes), problèmes potentiels de conflits en équipe.


2. FluentMigrator



Il s'agit d'une bibliothèque de migrations indépendante et légère, non liée à un ORM spécifique. Les migrations sont écrites manuellement en C# à l'aide d'une interface fluent.



Installation

dotnet add package FluentMigrator


Exemple de migration

[Migration(202310010001)]public class CreateUserTable : Migration{    public override void Up()    {        Create.Table("Users")            .WithColumn("Id").AsInt32().PrimaryKey().Identity()            .WithColumn("Name").AsString(100).NotNullable()            .WithColumn("Email").AsString(200).Nullable();                Create.Index("IX_Users_Email")            .OnTable("Users")            .OnColumn("Email");    }

public override void Down() { Delete.Table("Users"); }}


Exécution des migrations

Pour exécuter les migrations, on utilise un runner. Exemple de configuration dans Program.cs :

var serviceProvider = new ServiceCollection()    .AddFluentMigratorCore()    .ConfigureRunner(rb => rb        .AddSqlServer()        .WithGlobalConnectionString("YourConnectionString")        .ScanIn(typeof(CreateUserTable).Assembly).For.Migrations())    .BuildServiceProvider();

using var scope = serviceProvider.CreateScope();var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();runner.MigrateUp();


Avantages de F

Recommendations