2010-05-01 83 views
22

是否存在用于从代码内部执行FluentMigrator迁移的任何教程或示例代码?一些“入门...”教程将会非常棒。所有我能找到的是 FluentMigrator.Tests(单元测试),里面有FluentMigrator源代码,这些不像“Getting Started ...”那样有帮助。从代码执行FluentMigrator迁移

我只想添加几个类到项目中,并从运行项目的迁移,没有外部工具。流利Migrator可能吗?类似于

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

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

回答

4

因为一口流利的迁移是迁移的一个分支。NET您可能会发现getting started的迁移.NET有益

+2

我读过它,但我仍然不明白它是如何工作的。如何执行迁移?我有一个现有的项目,我只想添加一些类到项目中,并运行THAT项目的迁移,而无需外部工具。流利Migrator可能吗?像'FluentMigrator.Migrate(“数据库路径”,typeof(Migration024));',我将在'Program.Main()'中调用。 – Paya 2010-05-01 20:46:48

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的自定义操作类中。目标是您要执行的程序集的名称。在你的情况下,它将是你的移植项目产生的任何组件。您可以设置IRunnerContext上的其他选项。像名称空间,PreviewOnly等。不幸的是,它没有记录,所以你必须挖掘代码来弄清楚。生成Migrate.exe程序集的项目是我发现其中大部分内容的地方。

+2

MigrationRunner可能是更好的类,用于从代码等运行迁移... – Buthrakaur 2011-05-03 20:02:38

1

This tutorial对我来说很有用,可以帮助我弄清楚如何使用Visual Studio构建和使用带有MSBuild的FluentMigrator。

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

6

下面是C#(而不是MSBuild的,南特或控制台亚军),基于碎片#2做的一个例子:

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)。