Aller au contenu principal

5-10 Migration Événements

La base de données ne contient qu'une table villes, c'est peu pratique!

Pour rendre le site Web un minimum utile, il faudra des événements à afficher.

Rappel du DEA

Rappelons-nous de cette section du DEA...

img

Créer la migration

  1. Sous le dossier Migrations dans le projet Snowfall.Data, créez une nouvelle classe pour la migration N'oubliez pas de nommer le fichier et la version selon la convention YYYYMMDDHHMM.

    Snowfall.Data/Migrations/202302041311_CreerEvenements.cs
    using FluentMigrator;

    namespace Snowfall.Data.Migrations;

    [Migration(202302041311)]
    public class CreerEvenements : Migration
    {
    public override void Up()
    {
    // Up
    }

    public override void Down()
    {
    // Down
    }
    }
  2. Colonnes nom et id. Les colonnes nom et id ressemblent beaucoup à ce que nous avons fait pour les villes:

    public override void Up()
    {
    Create.Table("evenements")
    .WithColumn("id").AsInt64().PrimaryKey().Identity()
    .WithColumn("nom").AsString();
    }
  3. Colonnes description et image_path. À partir du DEA, on voit que description et image_path sont des colonnes text nullable. Comment représenter cela via la migration? Il ne suffit que d'ajouter la fonction Nullable().

    public override void Up()
    {
    Create.Table("evenements")
    .WithColumn("id").AsInt64().PrimaryKey().Identity()
    .WithColumn("nom").AsString()
    .WithColumn("description").AsString().Nullable()
    .WithColumn("image_path").AsString().Nullable();
    }
  4. Colonne date. La colonne date est de type DateTime, ou timestamp en PostgreSQL.

    public override void Up()
    {
    Create.Table("evenements")
    .WithColumn("id").AsInt64().PrimaryKey().Identity()
    .WithColumn("nom").AsString()
    .WithColumn("description").AsString().Nullable()
    .WithColumn("image_path").AsString().Nullable()
    .WithColumn("date").AsDateTime();
    }
  5. Colonne capacite.. Finalement, la colonne capacite est un integer, soit un int de 32 bits pour PostgreSQL.

    public override void Up()
    {
    Create.Table("evenements")
    .WithColumn("id").AsInt64().PrimaryKey().Identity()
    .WithColumn("nom").AsString()
    .WithColumn("description").AsString().Nullable()
    .WithColumn("image_path").AsString().Nullable()
    .WithColumn("date").AsDateTime()
    .WithColumn("prix").AsDecimal(10, 2)
    .WithColumn("capacite").AsInt32();
    }
  6. Fonction Down(). Finalement, implémentons la fonction Down() qui sera très simple.

    public override void Down()
    {
    Delete.Table("evenements");
    }

Lancer le projet

Lancez l'application et la nouvelle migration devrait s'exécuter. Dans la console Debug, devrait apparaître ceci:

CREATE TABLE "public"."evenements" ("id" bigserial NOT NULL, "nom" text NOT NULL, "description" text, "image_path" text, "date" timestamp NOT NULL, "prix" decimal(10,2) NOT NULL, "capacite" integer NOT NULL, CONSTRAINT "PK_evenements" PRIMARY KEY ("id"));

Remarquez "description" text, "image_path" text qui ne font pas mention de NOT NULL, date qui obtient le type timestamp (DateTime en Postgres) et capacite qui est simplement un integer, soit un Int32.

info

Comme FluentMigrator peut supporter différents systèmes de base de données, une conversion est faite automatiquement entre les types offerts par FluentMigrator (ex.: DateTime ou Int32) et les types équivalents dans le système de gestion de bd utilisé (ex.: timestamp ou integer)