从代码执行FluentMigrator迁移

Pay*_*aya 24 .net c# migration data-migration fluent-migrator

是否有任何教程或示例代码用于FluentMigrator从代码中执行迁移?一些"入门......"教程会很棒.所有我能找到的都是FluentMigrator.Tests(单元测试),内部FluentMigrator源代码,没有"入门......"那样有用.

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

FluentMigrator.Migrate("database path", typeof(Migration024));
Run Code Online (Sandbox Code Playgroud)

我打电话给Program.Main()谁?

Chr*_*cht 19

FluentMigrator的原始作者之一刚写了这篇"入门"博客文章.


Jus*_*udd 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();
}
Run Code Online (Sandbox Code Playgroud)

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

  • MigrationRunner可能是用于从代码等运行迁移的更好的类... (2认同)

Chr*_*s S 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

你在C#中遇到麻烦,TaskExecutor因为该类纯粹是为了控制台应用程序(migrate.exe).


Mik*_*Two 5

由于 fluent migrator 是 Migrator .NET 的一个分支,您可能会发现Migrator .net的入门指南很有帮助

  • 我读过它,但我仍然不明白它是如何工作的。如何执行迁移?我有一个现有项目,我只想向该项目添加几个类并从该项目运行迁移,无需外部工具。是否可以在 Fluent Migrator 中使用?类似于`FluentMigrator.Migrate("database path", typeof(Migration024));`,我会在`Program.Main()`中调用它。 (2认同)