tutorial session_end pagina net example ejercicios ejemplo codebehind asp asax c# .net asp.net-mvc-3 fluent-migrator

c# - session_end - ¿Es posible usar un migrador fluido en application_start?



global.asax example (2)

PM> Install-Package FluentMigrator.Tools

Agregue manualmente una referencia a:

packages/FluentMigrator.Tools.1.6.1/tools/AnyCPU/40/FluentMigrator.Runner.dll

Tenga en cuenta que el nombre de la carpeta variará según el número de versión, esta ilustración usa la versión 1.6.1 actual. Si necesita el .NET 3.5 runner use el directorio /35/ .

public static class Runner { public class MigrationOptions : IMigrationProcessorOptions { public bool PreviewOnly { get; set; } public string ProviderSwitches { get; set; } public int Timeout { get; set; } } public static void MigrateToLatest(string connectionString) { // var announcer = new NullAnnouncer(); var announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s)); var assembly = Assembly.GetExecutingAssembly(); var migrationContext = new RunnerContext(announcer) { Namespace = "MyApp.Sql.Migrations" }; var options = new MigrationOptions { PreviewOnly=false, Timeout=60 }; var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory(); using (var processor = factory.Create(connectionString, announcer, options)) { var runner = new MigrationRunner(assembly, migrationContext, processor); runner.MigrateUp(true); } } }

Tenga en cuenta que SqlServer2008ProcessorFactory esto se puede configurar dependiendo de su base de datos, hay soporte para: 2000, 2005, 2008, 2012 y 2014.

Estoy usando fluent migrator para administrar las migraciones de mi base de datos, pero lo que me gustaría hacer es que las migraciones se ejecuten al inicio de la aplicación. Lo más cerca que he logrado es esto:

public static void MigrateToLatest(string connectionString) { using (var announcer = new TextWriterAnnouncer(Console.Out) { ShowElapsedTime = true, ShowSql = true }) { var assembly = typeof(Runner).Assembly.GetName().Name; var migrationContext = new RunnerContext(announcer) { Connection = connectionString, Database = "SqlServer2008", Target = assembly }; var executor = new TaskExecutor(migrationContext); executor.Execute(); } }

Estoy seguro de que lo hice funcionar, pero no lo he visto en algún momento (proyecto de pasatiempo) y ahora arrojo excepciones de referencia nulas cuando llega a la línea Execute . Lamentablemente, no hay documentos para esto y he estado golpeándome la cabeza por años.

¿Alguien ha logrado hacer funcionar este tipo de cosas con FluentMigrator?


De hecho, he logrado ejecutar migraciones en el application_start; sin embargo, es difícil decir a partir de ese código lo que podría estar mal ... Dado que es de código abierto, simplemente tomaría el código y lo incorporaría a su solución y lo construiría para averiguar qué El método Execute se queja. Descubrí que el código fuente de Fluent Migrator está organizado bastante bien.

Una cosa de la que debería preocuparse si se trata de una aplicación web es asegurarse de que nadie use la base de datos mientras está migrando. Utilicé una estrategia para establecer una conexión, configurar la base de datos en modo de usuario único, ejecutar las migraciones, configurar la base de datos en modo multiusuario y luego cerrar la conexión. Esto también maneja el escenario de una aplicación web con equilibrio de carga en múltiples servidores, por lo que 2 servidores no intentan ejecutar migraciones contra la misma base de datos.