Migrations de bases de données en C# (.NET) avec Entity Framework
\n\nLors du développement d'applications en C# (.NET), l'une des tâches clés est la synchronisation du modèle de données (classes C#) et du schéma de la base de données. Modifier manuellement les tables, colonnes et relations est un processus laborieux et sujet aux erreurs. La solution à ce problème réside dans les migrations de bases de données, un mécanisme intégré d'Entity Framework (EF) Core ou d'Entity Framework 6. Les migrations permettent d'appliquer automatiquement les modifications à la structure de la BD en fonction des changements dans le code, tout en préservant les données existantes.
\n\nQue sont les migrations et pourquoi en a-t-on besoin ?
\n\nUne migration est un ensemble d'instructions (code en C#) décrivant comment modifier le schéma de la base de données d'une version à une autre. Au lieu d'écrire manuellement des scripts SQL, le développeur modifie les modèles C# (par exemple, en ajoutant une nouvelle propriété à une classe), et EF génère un fichier de migration. Ce fichier est ensuite appliqué à la base de données.
\n\n- \n
- Automatisation : Élimine l'écriture manuelle de SQL. \n
- Versionnement : Chaque migration est un fichier distinct avec un horodatage, permettant de revenir en arrière. \n
- Sécurité des données : Lors de l'ajout d'une colonne, EF ne supprime pas les lignes existantes (sauf indication contraire). \n
- Travail collaboratif : Tous les membres de l'équipe appliquent les mêmes migrations, ce qui évite les divergences de schéma. \n
Préparation du projet
\n\nPour travailler avec les migrations, le package Microsoft.EntityFrameworkCore.Tools (pour EF Core) ou EntityFramework (pour EF6) doit être installé. Installation via NuGet :
\n\n// Pour EF Core (via Package Manager Console)\nInstall-Package Microsoft.EntityFrameworkCore.Tools\n\n// Ou via .NET CLI\ndotnet add package Microsoft.EntityFrameworkCore.Tools\n\n\nUn contexte de base de données héritant de DbContext est également nécessaire. Exemple de modèle simple :
public class Blog\n{\n public int Id { get; set; }\n public string Title { get; set; }\n public string Content { get; set; }\n}\n\npublic class AppDbContext : DbContext\n{\n public DbSet<Blog> Blogs { get; set; }\n\n protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n {\n optionsBuilder.UseSqlServer("Server=(localdb)\\\\mssqllocaldb;Database=MyBlogDb;Trusted_Connection=True;");\n }\n}\n\n\nCréation de la première migration
\n\nOuvrez la Package Manager Console (dans Visual Studio : View -> Other Windows -> Package Manager Console) ou utilisez .NET CLI. Exécutez la commande :
\n\n// Via PMC\nAdd-Migration InitialCreate\n\n// Ou via CLI\ndotnet ef migrations add InitialCreate\n\n\nAprès exécution, un dossier Migrations apparaît dans le projet avec deux fichiers :
\n- \n
XXXXXXXXXXXXXX_InitialCreate.cs— la classe de migration avec les méthodesUp()(quoi modifier) etDown()(comment annuler). \n AppDbContextModelSnapshot.cs— un instantané du modèle actuel. \n
Application de la migration à la base de données
\n\nPour créer ou mettre à jour la BD vers la dernière version, exécutez :
\n\n// Via PMC\nUpdate-Database\n\n// Via CLI\ndotnet ef database update\n\n\nEF exécutera toutes les migrations non appliquées dans l'ordre. Si la base de données n'existe pas, elle sera créée automatiquement.
\n\nAjout d'un nouveau champ et création d'une migration
\n\nSupposons que nous décidions d'ajouter la propriété CreatedAt au modèle Blog :
public class Blog\n{\n public int Id { get; set; }\n public string Title { get; set; }\n public string Content { get; set; }\n public DateTime CreatedAt { get; set; } // nouveau champ\n}\n\n\nCréons maintenant une nouvelle migration :
\n\nAdd-Migration Aussi dans la bibliothèque
Géolocalisation et cartes en Kotlin : Guide complet d'intégration
Programmation réactive en Kotlin : bibliothèque RxKotlin et coroutines
Génération Swagger/OpenAPI pour TypeScript : bibliothèques et outils
Micrometer Java : guide complet avec exemples
Planificateur de tâches PHP : bibliothèque cron‑expression pour un planning flexible