86 votes

Bibliothèque de migration de bases de données pour .NET

Il existe un certain nombre de bibliothèques de migration pour .NET. Laquelle préférez-vous et pourquoi ?

Pour ceux d'entre vous qui n'ont pas entendu parler des migrations. C'est quelque chose que Ruby on Rails a rendu populaire. Il s'agit d'un moyen de spécifier le schéma et la version de votre base de données dans le code, et de "migrer" facilement entre les versions de votre base de données.

Voici un article sur les solutions de migration .NET http://flux88.com/2008/06/net-database-migration-tool-roundup/ . Je veux savoir ce que vous avez utilisé et trouvé utile.

42voto

michielvoo Points 15413

J'ai utilisé Migrator.NET y SubSonic . Je crois que Migrator.NET est en développement depuis plus longtemps et je le préfère à SubSonic.

Migrator.NET trouve les migrations dans votre assemblage (projet) en se basant sur un attribut, et non sur le nom du fichier. Le nom de fichier est plus conforme à la façon de travailler de la convention par rapport à la configuration, et est probablement inspiré de Ruby on Rails. Je trouve que les attributs sont plus naturels pour .NET.

Migrator peut exécuter des requêtes SQL spécifiques au fournisseur dans vos migrations. Ce n'est pas quelque chose que vous faites souvent, et ce n'est peut-être même pas recommandé, mais cela peut être vraiment précieux quand vous en avez besoin.

La base de code de Migrator.NET me semble très solide. Il dispose d'un modèle de fournisseur agréable qui tient compte de la syntaxe et des règles spécifiques au fournisseur. Il y a également plusieurs exécuteurs disponibles : console, MSBuild et Nant, et il y a aussi un exécuteur webforms pour ASP.NET. J'ai l'habitude de configurer le runner MSBuild comme une application Outil externe dans Visual Studio.

Edit : J'ai écrit un article expliquant comment exécuter des migrations dans Visual Studio .

Une chose qui manque à Migrator.NET est la configuration à l'aide de web.config, mais c'est un problème mineur, puisque vous le configurez habituellement une fois et l'oubliez ensuite. Mais la façon dont cela est fait dans SubSonic rend globalement plus facile le changement de configuration, comme lorsque vous avez besoin d'exécuter une migration sur le serveur de transit ou le serveur live, plutôt que sur votre machine locale.

J'espère que cela vous aidera !

11voto

Anton Gogolev Points 59794

J'ai utilisé mon propre outil ( octalforty Wizardby (quelle publicité éhontée) depuis plus de deux mois et vient de le rendre public. C'est plutôt sympa.

8voto

ferventcoder Points 2703

J'ai utilisé Manège . Il est basé sur le langage SQL et répond à de nombreuses préoccupations en matière d'audit (nous sommes régis par le SOx là où je travaille). De plus, il les versions de votre base de données basée sur le contrôle de la source (si vous le souhaitez - elle peut être basée sur ce que vous voulez).

8voto

Dejan Points 440

En voici un tout nouveau : https://github.com/dradovic/MigSharp

Il prend en charge SQL Server 2005/2008/CE 4, Oracle et Teradata. Il comprend également un cadre de validation agréable qui vérifie vos migrations pour les problèmes potentiels entre les bases de données et vous donne des conseils sur la façon de les résoudre.

En plus de cela, il dispose de quelques fonctionnalités plus intéressantes : support multi-modules, génération déterministe de SQL, etc. Lisez la suite ici : https://github.com/dradovic/MigSharp/wiki/Feature-Overview

Il permet également une injection SQL personnalisée. Vous pouvez donc toujours tirer parti des fonctionnalités d'une plate-forme spécifique.

4voto

Bernhard Kircher Points 1609

Ce n'est pas une vraie réponse, mais elle peut être intéressante pour les personnes qui recherchent des bibliothèques de migration .Net :

Un peu tard mais enfin Entity Framework 4.3 ont effectué leurs propres migrations ( Migrations basées sur le code ):

EF 4.3 Notes de mise à jour

Vous pouvez également consulter cette page exemple en utilisant des migrations basées sur le code :

Exemple (voir les notes de version et les liens pour plus de détails) :

public partial class AddPostClass : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "Posts",
            c => new
                {
                    PostId = c.Int(nullable: false, identity: true),
                    Title = c.String(maxLength: 200),
                    Content = c.String(),
                    BlogId = c.Int(nullable: false),
                })
            .PrimaryKey(t => t.PostId)
            .ForeignKey("Blogs", t => t.BlogId, cascadeDelete: true)
            .Index(t => t.BlogId)
            .Index(p => p.Title, unique: true);

        AddColumn("Blogs", "Rating", c => c.Int(nullable: false, defaultValue: 3));
    }

    public override void Down()
    {
        DropIndex("Posts", new[] { "BlogId" });
        DropForeignKey("Posts", "BlogId", "Blogs");
        DropColumn("Blogs", "Rating");
        DropTable("Posts");
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X