c# .net migration data-migration fluent-migrator

c# - Ejecutar migraciones de FluentMigrator desde el código



.net migration (5)

Aquí hay un ejemplo de cómo hacerlo en C # (en lugar de MSBuild, Nant o el consolador de la consola), basado en los desperdicios 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"); } }

Tendrá problemas para hacerlo en C # con TaskExecutor ya que esa clase está destinada exclusivamente para la aplicación de consola (migrate.exe).

¿Hay tutoriales o código de ejemplo para ejecutar migraciones de FluentMigrator desde dentro del código? Algunos tutoriales de "Empezando ..." serían simplemente impresionantes. Todo lo que pude encontrar fue FluentMigrator . Pruebas (pruebas unitarias), dentro de la fuente de FluentMigrator , que no son tan útiles como "Getting Started ...".

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

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

¿A cuál llamaría desde Program.Main() ?


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

Uso código similar a este en una clase de acción personalizada en WiX. Destino es el nombre del ensamblaje que desea ejecutar. En su caso, sería cualquier ensamblaje producido por su proyecto de migración. Hay otras opciones en el IRunnerContext que puede establecer. Al igual que Namespace, PreviewOnly, etc. Desafortunadamente, no está documentado, por lo que tendrá que buscar en el código para averiguarlo. El proyecto que genera el ensamblado Migrate.exe es donde encontré la mayor parte de esto.


Dado que fluent migrator es una bifurcación de Migrator .NET, puede ser útil comenzar con Migrator .net.


Uno de los autores originales de FluentMigrator acaba de escribir esta publicación de blog "Cómo empezar" .


Este tutorial me fue útil para averiguar cómo construir y usar FluentMigrator con MSBuild, si está usando estudios visuales.

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