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.ToolsCré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 updateLa 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 FluentMigratorExemple 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
Aussi dans la bibliothèque
Internationalisation (i18n) en Swift pour iOS et macOS
Utilisation de GraphQL en Swift : bibliothèques Apollo et Relay pour iOS/macOS
Travailler avec Kafka en Kotlin : bibliothèques, configuration et exemples