从代码执行FluentMigrator迁移

时间:2010-05-01 20:02:07

标签: c# .net migration data-migration fluent-migrator

是否有任何用于从代码中执行FluentMigrator迁移的教程或示例代码?一些“入门......”教程会很棒。所有我能找到的是{i> FluentMigrator.Tests (单元测试),在FluentMigrator源内,这不像“入门......”那样有用。

我只想在项目中添加几个类,并从那个项目中运行迁移,而无需外部工具。是否可以在Fluent Migrator中使用?像

这样的东西
FluentMigrator.Migrate("database path", typeof(Migration024));

我会从Program.Main()拨打电话?

5 个答案:

答案 0 :(得分:19)

FluentMigrator的原始作者之一刚写了this "Getting started" blogpost

答案 1 :(得分:16)

我从他们的源代码中抄袭了这个......

using (IAnnouncer announcer = new TextWriterAnnouncer(Console.Out))
{
   IRunnerContext migrationContext = new RunnerContext(announcer) 
   { 
      Connection = "Data Source=test.db;Version=3", 
      Database = "sqlite", 
      Target = "migrations" 
   };

   TaskExecutor executor = new TaskExecutor(migrationContext);
   executor.Execute();
}

我在WiX的自定义操作类中使用与此类似的代码。 Target是要执行的程序集的名称。在您的情况下,它将是您的迁移项目生成的任何程序集。您可以设置IRunnerContext上的其他选项。就像Namespace,PreviewOnly等一样。不幸的是,它没有记录,所以你必须深入研究代码才能弄明白。生成Migrate.exe程序集的项目是我发现大部分内容的地方。

答案 2 :(得分:8)

以下是基于Stackoverflow上的剪贴板在C#(而不是MSBuild,Nant或控制台运行器)中执行此操作的示例:

static void Main(string[] args)
{
    string connectionString = @"server=.\SQLEXPRESS;database=testdb;uid=sa2;pwd=Passw0rd";
    Announcer announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s));
    announcer.ShowSql = true;

    Assembly assembly = Assembly.GetExecutingAssembly();
    IRunnerContext migrationContext = new RunnerContext(announcer);

    var options = new ProcessorOptions 
    { 
        PreviewOnly = false,  // set to true to see the SQL
        Timeout = 60 
    };
    var factory = new SqlServer2008ProcessorFactory();
    using (IMigrationProcessor processor = factory.Create(connectionString, announcer, options))
    {
        var runner = new MigrationRunner(assembly, migrationContext, processor);
        runner.MigrateUp(true);

        // Or go back down
        //runner.MigrateDown(0);
    }
}

[Migration(1)]
public class CreateUserTable : Migration
{
    public override void Up()
    {
        Create.Table("person")
            .WithColumn("Id").AsGuid().PrimaryKey()
            .WithColumn("Name").AsString();
    }

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

使用TaskExecutor在C#中进行此操作会遇到麻烦,因为该类仅适用于控制台应用程序(migrate.exe)。

答案 3 :(得分:4)

由于流畅的迁移器是Migrator .NET的一个分支,因此您可能会发现迁移器的getting started .net很有用

答案 4 :(得分:1)

如果您使用的是可视工作室,

This tutorial对于了解如何使用MSBuild构建和使用FluentMigrator非常有用。

还附带了备份和恢复数据库的示例。