2010-05-01 111 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)。