Migrations et gestion du schéma
Créez, appliquez et annulez des migrations pour faire évoluer votre schéma de base de données en toute sécurité.
Migrations et gestion du schéma est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Que sont les migrations EF Core ?
Les migrations sont des fichiers générés par le code qui décrivent les changements progressifs du schéma de la base de données. Au lieu d’écrire manuellement du code SQL DDL, EF Core le génère et l’applique automatiquement, ce qui maintient le code et la base de données synchronisés.
Installation des outils EF Core
L’outil CLI EF Core (dotnet-ef) doit être installé globalement (ou comme outil local) pour exécuter les commandes de migration depuis le terminal.
# Install globally
dotnet tool install --global dotnet-ef
# Verify
dotnet ef --version
# Required NuGet packages in your project:
# Microsoft.EntityFrameworkCore.Design
# Microsoft.EntityFrameworkCore.SqlServer (or Sqlite, etc.)Création de votre première migration
dotnet ef migrations add compare votre modèle actuel au dernier instantané et génère un fichier de migration contenant les méthodes Up() (application) et Down() (annulation).
# Create initial migration
dotnet ef migrations add InitialCreate
# Output files created:
# Migrations/20240101_InitialCreate.cs <- Up/Down
# Migrations/20240101_InitialCreate.Designer.cs
# Migrations/AppDbContextModelSnapshot.cs <- current modelDans un fichier de migration
Chaque migration possède une méthode Up (qui applique les changements) et une méthode Down (qui les annule). EF Core les génère automatiquement à partir des différences entre les modèles.
public partial class InitialCreate : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Products",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(maxLength: 200, nullable: false),
Price = table.Column<decimal>(type: "decimal(18,2)", nullable: false)
},
constraints: table => table.PrimaryKey("PK_Products", x => x.Id));
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(name: "Products");
}
}Application des migrations
dotnet ef database update applique toutes les migrations en attente. EF Core suit les migrations déjà exécutées dans la table __EFMigrationsHistory.
# Apply all pending migrations
dotnet ef database update
# Apply up to a specific migration
dotnet ef database update AddProductIndex
# Roll back to a previous migration
dotnet ef database update InitialCreateMigration programmatique au démarrage
En production, vous pouvez appliquer les migrations par programmation au démarrage afin que la base de données soit toujours à jour, sans étapes CLI manuelles.
var app = builder.Build();
// Apply pending migrations at startup
using (var scope = app.Services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
await db.Database.MigrateAsync();
}
app.Run();Ajout d’une colonne dans une nouvelle migration
Ajoutez une propriété à votre entité, puis créez une nouvelle migration. EF Core détecte le changement et génère une opération AddColumn.
// 1. Add property to entity
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = "";
public decimal Price { get; set; }
public string? Description { get; set; } // NEW
}
// 2. Generate migration
// dotnet ef migrations add AddProductDescription
// Generated Up():
migrationBuilder.AddColumn<string>(
name: "Description",
table: "Products",
nullable: true);Initialisation des données dans les migrations
Utilisez HasData dans OnModelCreating pour initialiser les données de référence. EF Core les inclut dans Up sous forme d’instructions INSERT.
modelBuilder.Entity<Category>().HasData(
new Category { Id = 1, Name = "Electronics" },
new Category { Id = 2, Name = "Books" },
new Category { Id = 3, Name = "Clothing" }
);
// Then regenerate the migration:
// dotnet ef migrations add SeedCategoriesSQL personnalisé dans les migrations
Lorsque vous avez besoin de DDL qu’EF Core ne peut pas générer automatiquement (déclencheurs, vues, procédures stockées), utilisez migrationBuilder.Sql().
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"
CREATE VIEW vw_ActiveProducts AS
SELECT Id, Name, Price
FROM Products
WHERE IsActive = 1
");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("DROP VIEW vw_ActiveProducts");
}Suppression d’une migration
Si vous n’avez pas encore appliqué une migration, vous pouvez la supprimer avec dotnet ef migrations remove. Seule la dernière migration peut être supprimée de cette manière.
# Remove the last unapplied migration
dotnet ef migrations remove
# List all migrations and their status
dotnet ef migrations list
# Script all migrations to SQL (for DBA review)
dotnet ef migrations script --output deploy.sqlCas concret : stratégie de migration CI/CD
Dans une chaîne CI/CD, générez un script de migration et faites-le examiner par un DBA avant de l’appliquer en production — n’exécutez jamais MigrateAsync() aveuglément dans des systèmes de production critiques.
# Generate idempotent script for all pending migrations
dotnet ef migrations script --idempotent --output migrations.sql
# Review migrations.sql, then apply via sqlcmd / psql:
# sqlcmd -S server -d db -i migrations.sqlVérification rapide
Quelle table EF Core indique quelles migrations ont déjà été appliquées à une base de données ?
Récapitulatif : migrations et gestion du schéma
Points essentiels :
dotnet ef migrations add <Name>génère des fichiers décrivant les changements progressifs du schéma- Chaque migration possède des méthodes
Up()(application) etDown()(annulation) dotnet ef database updateapplique les migrations en attente- Utilisez
MigrateAsync()au démarrage de l’application pour automatiser les déploiements - Générez des scripts SQL idempotents à faire examiner par le DBA dans les chaînes de production
Apprends C# avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 93
- Leçons
- 346
Questions Fréquemment Posées
La leçon « Migrations et gestion du schéma » est-elle gratuite ?
Oui — le texte complet de « Migrations et gestion du schéma » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Migrations et gestion du schéma » ?
Créez, appliquez et annulez des migrations pour faire évoluer votre schéma de base de données en toute sécurité. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Migrations et gestion du schéma » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Notions de base sur DbContext et DbSet
- Migrations et gestion du schéma
- Opérations CRUD avec EF Core
- Relations : un-à-plusieurs et plusieurs-à-plusieurs