Aller au contenu principal

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.

important

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.

  1. Créer la classe. Via clic droit sur le dossier Migrations -> Add -> Class/Interface. Imgur

  2. Nommer la classe. Nommez la classe CreerVilles Imgur

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:

  1. Hériter de Migration. Dans un premier temps, la classe de migration doit hériter de la classe Migration provenant de FluentMigrator. Imgur

    using FluentMigrator;

    namespace Snowfall.Data.Migrations;

    public class CreerVilles : Migration
    {

    }
  2. 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 implemente

    En 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().

    important

    Les 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. Imgur

    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();
    }
    }
  3. 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 : Migration
    important

    La 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.

  4. 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:

    Imgur