Conventions PG, Migrations et Seeders
Conventions de nommage PostgreSQL
Convention | Exemple | |
---|---|---|
Table | - Minuscule - Snake case - Pluriel | - evenements - commentaires - application_users |
Colonne | - Minuscule - Snake case - Singulier | - id - evenement_id - nom_complet |
Table pivot | - Minuscule - table1pluriel_table2pluriel - Ordre alphabétique | - evenements_types - inscriptions_utilisateurs |
Migrations
Créer une migration
[Migration(202301311649)]
public class CreerVilles : Migration
{
public override void Up()
{
Create.Table("villes")
.WithColumn("id").AsInt64().PrimaryKey().Identity()
.WithColumn("nom").AsString()
.WithColumn("pays_iso").AsString(2);
}
public override void Down()
{
Delete.Table("villes");
}
}
-
Créer une classe. Créer une classe sous le projet Data, dossier Migrations.
-
Nommer la classe. Nommez la classe selon le format:
- Creer[NomDeLaTableAuPluriel]
- AjouterColonneA[NomDeLaTable]
Pour tout autre besoin, utiliser le verbe
Creer
ouAjouter
suivi de l'action. -
Ajouter l'attribut
[Migration]
et hériter de la classeMigration
. Versionnez la migration à l'aide de l'attribut[Migration]
, puis faites là hériter deMigration
.[Migration(202302041311)]
public class CreerEvenements : MigrationVersionnez selon le format
YYYMMDDHHMM
. -
Changez le nom du fichier pour ajouter comme préfixe la version. Par exemple
202302041311_CreerEvenements.cs
. -
Définissez les fonctions:
public override void Up()
public override void Down()
Créer une table
Create.Table("nom_de_la_table")
Créer une colonne
Lors de la création de la table
Create.Table("nom_de_la_table")
.WithColumn("nom_de_la_colonne")
Ajouter une colonne à une table existante
Create.Column("ville_id")
.OnTable("evenements")
.AsInt64();
Create.Column()
: Création de la colonne et de son nomOnTable
: Table pour laquelle créer la colinneAsInt64()
: Définir le type via les fonctionsAs
.
Définir le Type d'une colonne
Create.Table("nom_de_la_table")
.WithColumn("nom_de_la_colonne")
.AsString()
AsString()
: Défini un type string/text/varchar. Il existe plusieurs fonctionsAs
.
Définir une clé primaire
Create.Table("villes")
.WithColumn("id").AsInt64().PrimaryKey().Identity()
PrimaryKey()
: La colonne sera une clé primaireIdentity()
: La colonne sera gérée et auto incrémentée par la BD
Définir une clé étrangère
Create.ForeignKey()
.FromTable("commentaires").ForeignColumn("evenement_id")
.ToTable("evenements").PrimaryColumn("id");
FromTable
: Table qui contient la FK (référence vers une autre table)ForeignColumn
: Nom de la colonne dans la table qui contient la FKToTable
: Nom de la table vers laquelle on fait une référencePrimaryColumn
: Nom de la colonne vers laquelle on veut faire référence
Exécuter les migrations
Dans Program.cs
:
app.Services.MigrateUp();
Réinitialiser les migrations
Dans Program.cs
, exécuter MigrateDown()
et ensuite MigrateUp()
app.Services.MigrateDown();
app.Services.MigrateUp();
Réinitialiser via la BD directement.
Vous pouvez aussi vider manuellement (ex.: Via DataGrip) le contenu de la base de données en supprimant les différentes tables
Seeders
Créer un seed
Pour créer un seed, créez simplement une nouvelle migration avec un numéro de version après la table concernée.
Insérer des données (Up)
public override void Up()
{
Insert.IntoTable("villes").Row(new
{
nom = "Vegas, NV",
pays_iso = "US"
});
Insert.IntoTable("villes").Row(new
{
nom = "Montreal, QC",
pays_iso = "CA"
});
}
Supprimer des données (Down)
public override void Down()
{
Delete.FromTable("villes").AllRows();
}
Insérer des données relationnelles
Vous devez malheureusement coder en dur les id
auxquels vous devez faire référence. Utilisez des enum
au besoin pour rendre le tout plus propre.
public class SeedEvenements : Migration
{
private enum Villes
{
Vegas = 1,
}
public override void Up()
{
Insert.IntoTable("evenements").Row(new
{
nom = "What happens in Vegas",
description = "Stays in Vegas",
prix = 30.00,
capacite = 4000,
date = DateTime.Now,
ville_id = (int) Villes.Vegas,
});
}
//...