5-6 Première migration
Nous allons créer une première migration simple, soit celle pour générer la table villes
. Comme les événements peuvent se tenir dans plusieurs villes, un lien existe entre la table evenements
et villes
.
Nous commençons par villes
, puisque contrairement à evenements
, elle n'a pas de dépendances et est donc assez simple.
Une migration est en réalité simplement une classe qui hérite de la classe Migration
fournie par FluentMigrator
.
La première étape est donc de simplement créer une classe.
Créer la classe
Commençons par créer la classe responsable de la migration.
-
Créer la classe. Via
clic droit sur le dossier Migrations
->Add
->Class/Interface
. -
Nommer la classe. Nommez la classe
CreerVilles
Structure de la classe
Vous aurez la classe vide suivante suite à l'étape précédente:
namespace Snowfall.Data.Migrations;
public class CreerVilles
{
}
Afin de lui donner son comportement de Migration, il manque quelques éléments:
-
Hériter de
Migration
. Dans un premier temps, la classe de migration doit hériter de la classe Migration provenant de FluentMigrator.using FluentMigrator;
namespace Snowfall.Data.Migrations;
public class CreerVilles : Migration
{
} -
Implémentation minimale de Up/Down. Vous remarquerez que Rider vous indique l'erreur suivante:
Abstract inherited member 'void FluentMigrator.MigrationBase.Up()' is not implemented
Abstract inherited member 'void FluentMigrator.MigrationBase.Down()' is not implementeEn effet,
Migration
est une classe abstraite (ne pouvant être instanciée) et les classes héritant de cette dernière doivent au minimum implémenter les fonctions Up() et Down().importantLes fonctions Up() et Down() permettent d'exécuter les migrations dans les 2 sens: faire évoluer la base de données en créant une table par exemple (up) ou reculer (down).
Rider offre un raccourci pour rapidement implémenter les fonctions requises. En utilisant l'aide contextuelle, utilisez
Implement missing members
.Vous obtiendrez ceci:
using FluentMigrator;
namespace Snowfall.Data.Migrations;
public class CreerVilles : Migration
{
public override void Up()
{
throw new NotImplementedException();
}
public override void Down()
{
throw new NotImplementedException();
}
} -
Attribut de version. Les migrations doivent être exécutées dans un ordre précis. En effet, si une table dépend d'une autre table, on essaie dans un premier temps de créer la dépendance. Pour connaitre l'ordre, on "versionne" les migrations.
On utilise l'attribut de classe
[Migration()]
afin de préciser la version.[Migration(202301311649)]
public class CreerVilles : MigrationimportantLa convention pour nommer les versions veut qu'on utilise le format YYYYMMDDHHMM, soit date, mois, jour, heure, minutes correspondant au moment où la migration est créée.
Ainsi, on se retrouve avec des migrations séquentielles.
Vous pouvez remplacer la version dans l'exemple par la version correspondante au moment de création actuel.
-
Nom du ficher contenant la version. Autre convention, on ajoute au nom du fichier un préfixe correspondant au numéro de version. Ainsi, le nom du fichier pour la migration deviendra
202301311649_CreerVilles.cs
et dans la liste des migrations, les fichiers seront présentés selon l'ordre d'exécution.Vous pouvez changer le nom du fichier via
clic droit
->Edit
->Rename...
, pour obtenir au final: