web-dev-qa-db-ja.com

コードからFluentMigratorの移行を実行する

コード内からFluentMigrator移行を実行するためのチュートリアルやサンプルコードはありますか?いくつかの「はじめに...」チュートリアルは素晴らしいでしょう。私が見つけたのは FluentMigrator.Tests (ユニットテスト)、FluentMigrator source内で、「GettingStarted ...」ほど役に立ちません。

プロジェクトにいくつかのクラスを追加し、外部ツールを使用せずにthatプロジェクトからの移行を実行したいだけです。 Fluent Migratorで可能ですか?何かのようなもの

_FluentMigrator.Migrate("database path", typeof(Migration024));
_

Program.Main()から呼び出すのはどれですか?

24
Paya

流暢な移行者はMigrator.NETのフォークであるため、Migrator .netの はじめに が役立つ場合があります。

4
Mike Two

FluentMigratorの元の作者の1人が書いたばかりです この「はじめに」のブログ投稿

19

私は彼らのソースコードからこれを切り取った...

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のカスタムアクションクラスでこれに似たコードを使用します。ターゲットは、実行するアセンブリの名前です。あなたの場合、それはあなたの移行プロジェクトによって作成されたアセンブリです。設定できるIRunnerContextには他のオプションがあります。名前空間、PreviewOnlyなどのように。残念ながら、それは文書化されていないので、それを理解するためにコードを掘り下げる必要があります。 Migrate.exeアセンブリを生成するプロジェクトは、私がこれらのほとんどを見つけた場所です。

16
Justin Rudd

Stackoverflowのスクラップに基づいて、(MSBuild、Nant、またはコンソールランナーではなく)C#で実行する例を次に示します。

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");
    }
}

そのクラスは純粋にコンソールアプリ(migrate.exe)を対象としているため、C#でTaskExecutorを使用してそれを行うのは問題があります。

9
Chris S

このチュートリアル ビジュアルスタジオを使用している場合、MSBuildでFluentMigratorをビルドして使用する方法を理解するのに役立ちました。

また、データベースのバックアップと復元の例も付属しています。

1
craastad