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...
Créer la migration
-
Sous le dossier
Migrations
dans le projetSnowfall.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.csusing FluentMigrator;
namespace Snowfall.Data.Migrations;
[Migration(202302041311)]
public class CreerEvenements : Migration
{
public override void Up()
{
// Up
}
public override void Down()
{
// Down
}
} -
Colonnes
nom
etid
. 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();
} -
Colonnes
description
etimage_path
. À partir du DEA, on voit quedescription
etimage_path
sont des colonnestext
nullable. Comment représenter cela via la migration? Il ne suffit que d'ajouter la fonctionNullable()
.public override void Up()
{
Create.Table("evenements")
.WithColumn("id").AsInt64().PrimaryKey().Identity()
.WithColumn("nom").AsString()
.WithColumn("description").AsString().Nullable()
.WithColumn("image_path").AsString().Nullable();
} -
Colonne
date
. La colonnedate
est de typeDateTime
, outimestamp
enPostgreSQL
.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();
} -
Colonne
capacite
.. Finalement, la colonnecapacite
est uninteger
, soit unint
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();
} -
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
.
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
)