Installation et configuration du FluentMigrator pour une application C#

dotnet_logo

Dans cet article je vais vous expliquer comment installer et intégrer Fluent Migrator dans une application C#. Nous allons voir l’ensemble des configurations à faire pour la mise en place du FluentMigratoret et comment le lancer via des scripts powerShell.

Qu’est-ce qu’un FluentMigrator? 

FluentMigrator est une  librairie .net écrite en C#. Elle vous permet de migrer votre base de données de manière plus simple. Chaque migration est une classe qui hérite de la classe de base de migration (voir plus de détails dans les chapitres suivants) et possède un attribut de migration (version) qui l’identifie.

Installation et configuration du FluentMigrator avec Nuget Package

Pour l’installation du FluentMigrator :

  • Lancez Visual Studio, faites un clic droit sur les références de votre projet et choisissez (Manage Nuget Packages..).
  • Choisissez FluentMigratordans dans les résultats de recherche et cliquez sur installer.

On peut aussi l’installer en utilisant la console Visual Studio avec la commande :

PM> Install-Package FluentMigrator

Création d’une classe de migration

L'idée avec Fluentmigrator est de créer une série de classes qui créent et modifient le schéma de base de données (et les données). Chaque classe représente une seule «migration». Voici l'exemple d'une migration qui vous permet de créer une table Interlocuteur dans la base de données :

Migration(201601011153)]
public class CreateUserTable : Migration
{
    public overridevoidUp()
    {
      Create.Table("Interlocuteur")
                .WithColumn("Id").AsInt32().NotNullable().PrimaryKey().Identity()
                .WithColumn("Nom").AsString(100).NotNullable()
                .WithColumn("Prenom").AsString().NotNullable()
                .WithColumn("Address").AsString(100).NotNullable()
    }

    public overridevoidDown()
    {
      Delete.Table("Interlocuteur");
    }
}

Chaque migration a besoin d'un identifiant unique dans l'attribut de migration ([Migration(201601011153)]), donc nous avons l'habitude d'utiliser le format de YYYYMMDDHHMM, pour minimiser les chances que deux développeurs puissent créer une migration avec le même identifiant.

Les fonctions « Up » et « Down »

Le code défini dans la méthode Up permet de Créer/Modifier la base de données. Par contre, le code de la méthode Down annule les modifications effectuées par la méthode Up.

Comment modifier le nom d’une colonne ?

Prenons l’exemple de la table Interlocuteur, supposons que l’on veut modifier le nom de la colonne Prénom.

[Migration(201601011154)]
public class RenameColumn : Migration
{
	public overridevoidUp()
	{
	  Rename.Column("Prenom").OnTable("Interlocuteur").To("Prenom_Interlocuteur");
	}
	public overridevoidDown()
	{
	  Rename.Column("Prenom_Interlocuteur").OnTable("Interlocuteur").To("Prenom");
	}
}

Comme vous pouvez le voir, sur la classe de base, il y a un certain nombre de propriétés qui vous permettent de créer/supprimer/renommer/modifier.

Exécuter une expression SQL

Fluentmigrator vous permet d'exécuter un bloc de scripts ou un fichier SQL. Pour intégrer un script SQL, il faut ajouter le fichier à votre projet de migration et ensuite changer la propriété Action à Ressource incorporée.

[DateMigration(20160105164400)]
public class FileCleanup : FluentMigrator.Migration
    {
        public overridevoidDown()
        {
        }
        public overridevoidUp()
        {
          Execute.EmbeddedScript("FileCleanup.sql");
	  Execute.Sql("DELETE TABLE Interlocuteur");
        }
    }

L’expression Schema.Exists

Vous pouvez écrire des migrations conditionnelles sur le schéma préexistant, qui est très pratique si vous avez besoin d’ajouter une colonne lorsque vous ne savez pas si elle existe déjà :

if (!Schema.Table("Interlocuteur").Column("Nom").Exists())
{
 Alter.Table("Interlocuteur").AddColumn("Nom").AsString(100).NotNullable();
}

Comment ajouter une extension

Les méthodes d'extension vous permettent d'ajouter des méthodes à des types existants sans créer un type dérivé, ni recompiler ou modifier le type d'origine.

Par exemple, vous pouvez créer une méthode d'extension pour envelopper .AsString(Int32.MaxValue) dans .AsMaxString().

internal static class MigratorExtensions
{
    public static ICreateTableColumnOptionOrWithColumnSyntax AsMaxString(this ICreateTableColumnAsTypeSyntax createTableColumnAsTypeSyntax)
    {
        return createTableColumnAsTypeSyntax.AsString(int.MaxValue);
    }
}

Comment lancer les migrations

Les migrations sont compilées dans une DLL. Pour les exécuter, vous pouvez utiliser soit le lanceur de migration (migrate.exe), soit MSBuild.

Pour lancer la migration :

  • Créez un fichier batch qui va lancer la commande migrate.exe:
 packages\FluentMigrator.Tools.1.6.0\tools\AnyCPU\40\Migrate.exe  /conn "Data Source=(local);Initial Catalog=mydatabasename;uid=;pwd=;Trusted_Connection=yes;" /provider sqlserver2012 /assembly "testProject.migrations.dll" /verbose=true --task rollback --steps=%1

pause
  • Ensuite, exécutez le fichier batch pour lancer les migrations.

Et voilà !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.