25

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

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

FluentMigrator.Migrate("database path", typeof(Migration024));

我会从哪里打电话Program.Main()

4

5 回答 5

19

FluentMigrator 的原作者之一刚刚写了这篇“入门”博文。

于 2011-04-04T11:34:19.147 回答
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 程序集的项目是我发现其中大部分内容的地方。

于 2010-09-27T22:32:50.107 回答
9

这是一个基于 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");
    }
}

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

于 2013-03-08T13:45:16.330 回答
5

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

于 2010-05-01T20:10:06.753 回答
1

如果您使用的是 Visual Studio,本教程对我了解如何通过 MSBuild 构建和使用 FluentMigrator 很有用。

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

于 2012-09-28T09:29:14.317 回答