2010-05-01 38 views
22

¿Hay algún tutorial o código de ejemplo para ejecutar migraciones FluentMigrator desde el código? Algún tutorial de "Comenzando ..." sería simplemente increíble. Todo lo que pude encontrar fue FluentMigrator.Testía (pruebas unitarias), dentro de la fuente FluentMigrator, que no son tan útiles como "Comenzando ...".Ejecutar migraciones de FluentMigrator desde el código

Solo quiero agregar algunas clases al proyecto y ejecutar las migraciones desde que proyecto, sin herramientas externas. ¿Es posible en Fluent Migrator? Algo como

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

que yo llamaría desde Program.Main()?

Respuesta

4

Desde migrador fluidez es un tenedor de Migrator .NET es posible encontrar la getting started para Migrator .net útiles

+2

Lo he leído, pero todavía no entiendo cómo funciona. ¿Cómo ejecutar las migraciones? Tengo un proyecto existente, y solo quiero agregar algunas clases al proyecto y ejecutar las migraciones desde ese proyecto, sin herramientas externas. ¿Es posible en Fluent Migrator? Algo como 'FluentMigrator.Migrate (" database path ", typeof (Migration024));', que llamaría 'Program.Main()'. – Paya

16

I cribbed esto desde su código fuente ...

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

que utiliza código similar al esto en una clase de acción personalizada en WiX. Target es el nombre del ensamblado que desea ejecutar. En su caso, sería cualquier ensamblado producido por su proyecto de migración. Hay otras opciones en el IRunnerContext que puede configurar. Como Namespace, PreviewOnly, etc. Lamentablemente, no está documentado, por lo que tendrás que profundizar en el código para resolverlo. El proyecto que genera el ensamblado Migrate.exe es donde encontré la mayor parte de esto.

+2

MigrationRunner es probablemente una mejor clase para usar para ejecutar migraciones desde código, etc. ... – Buthrakaur

1

This tutorial me resultó útil para descubrir cómo construir y usar FluentMigrator con MSBuild, si está utilizando estudios visuales.

También viene con un ejemplo de copia de seguridad y restauración de una base de datos.

6

He aquí un ejemplo de hacerlo en C# (en lugar de MSBuild, Nant o el corredor de la consola), sobre la base de sobras en 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"); 
    } 
} 

Vas a tener problemas haciendo en C# con TaskExecutor como la clase es solo para la aplicación de la consola (migrate.exe).

Cuestiones relacionadas