2010-05-01 4 views
22

Есть ли какие-либо учебники или примеры кода для выполнения FluentMigrator миграции из кода? Некоторое руководство «Начало работы ...» было бы просто потрясающе. Все, что я смог найти, это FluentMigrator.Tests (модульные тесты), внутри FluentMigrator источник, который не так полезен, как «Начало работы ...».Выполнять миграцию FluentMigrator из кода

Я просто хочу добавить несколько классов в проект и выполнить миграции от , что проект без внешних инструментов. Возможно ли это в Fluent Migrator? Что-то вроде

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

которое я бы назвал от Program.Main()?

ответ

4

Поскольку беглый Migrator является ответвлением Migrator .NET вы можете найти getting started для Migrator .net полезного

+2

Я прочитал его, но я до сих пор не понимаю, как это работает. Как выполнить миграцию? У меня есть существующий проект, и я просто хочу добавить несколько классов в проект и выполнить миграции из проекта THAT без внешних инструментов. Возможно ли это в Fluent Migrator? Что-то вроде 'FluentMigrator.Migrate (« путь к базе данных », typeof (Migration024));', который я бы назвал в 'Program.Main()'. – Paya

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

1

This tutorial было полезно для меня выяснить, как создавать и использовать FluentMigrator с MSBuild, если вы используете визуальные студии.

Также представлен пример резервного копирования и восстановления базы данных.

6

Вот пример сделать это в C# (вместо MSBuild, Nant или консоли бегуна), основанный на клочках на Stackoverflow:

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

Смежные вопросы