Estoy usando fluido migrator para gestionar mi base de datos de migraciones, pero lo que me gustaría hacer es que las migraciones que se ejecute en la aplicación de inicio. El más cercano que he conseguido 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 he tenido este trabajo, pero no lo he mirado por algún tiempo (pasatiempo) y ahora es lanzar excepciones de referencia nulas cuando se llega a la Execute línea. Lamentablemente no hay documentación y he estado golpeando mi cabeza en él para las edades.

Alguien ha logrado obtener este tipo de cosas de trabajo con FluentMigrator?

  • Me voy de registro aquí: Mala Idea. Atar las implementaciones/migraciones en el inicio de su aplicación? Locura. ¿Cuál es la aplicación que va a hacer si falla la migración? No arranca?
  • la aplicación es probable que se ejecute si se espera el migrar la base de datos? Al fallar en el arranque es la respuesta correcta.
  • Apenas. Inmediatamente debe revertir una aplicación que ha fallado en su migración. La aplicación no debería ser consciente de cuál es su versión en sólo debe ejecutar la versión de la que tiene.
  • ¿Qué acerca de las pruebas? La generación de una base de datos vacía para realizar la integración o aceptación de las pruebas en contra. Eso es válido y útil escenario.
  • Se trata de un par de años abajo de la línea, pero lo que hago ahora es: Crear servidor que ejecuta sql migraciones (redgate herramientas), si no la construcción de las reversiones, si no que continuar e implementar el software. Este es el mismo para el control de calidad, en vivo, etc. Localmente, el dev team uso de redgate sql de control de código fuente. Está demostrando ser una manera estable de trabajo.
InformationsquelleAutor ilivewithian | 2011-09-27

2 Comentarios

  1. 63

    PM> Install-Package FluentMigrator.Herramientas

    Manualmente agregar una referencia a:

    packages\FluentMigrator.Tools.1.6.1\tools\AnyCPU0\FluentMigrator.Runner.dll

    Tenga en cuenta que el nombre de la carpeta puede variar en el número de la versión, este ejemplo utiliza la actual versión 1.6.1. Si usted necesita .NET 3.5 corredor utilizar el \35\ directorio.

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

    Nota la SqlServer2008ProcessorFactory esto es configurable dependiente de su base de datos, hay soporte para: 2000, 2005, 2008, 2012 y 2014.

    • Yo estaba recibiendo un error que TextWriterAnnouncer no implementa IDisposable entonces usted no puede usar un uso sobre él. Esto fue en la última versión de FluentMigrator
    • Para cualquiera de instalar FluentMigrator de NuGet, FluentMigrator.Corredor está en las herramientas, y no se hace referencia de forma predeterminada.
    • FluentMigrator.Corredor está en la FluentMigrator demasiado. En virtud de paquetes, hay herramientas dir (esto es como lo de la v1.1.1.0.
    • Como de 1 año hubo un cambio que quita IDisposable de TextAnnouncer. En su lugar, disponer la IMigrationProcessor si usted está recibiendo el archivo en uso de errores.
    • Es posible que este enfoque no configurar los convenios correctamente? Por Ejemplo: En El Extranjero, El Nombre De La Clave
    • No se olvide de instalar «FluentMigrator.»Herramientas de paquete, este es un elemento independiente en Nuget (porque por defecto el paquete tiene sólo x86 corredor y fallará con BadImageFormatException en AnyCPU proyectos.
    • Tengo una consulta si hay montón de archivo de la migración y de repente hay un error mientras este código de proceso (un archivo ) y quiero que en caso de cualquier error, a continuación, se va a ir al archivo siguiente

  2. 5

    He hecho la ejecución de las migraciones en el application_start sin embargo es difícil saber a partir de que el código de lo que podría estar equivocado… Ya que es de código abierto, me acaba de agarrar el código y tire de ella en su solución y la construcción para averiguar cuál es el método Execute es quejarse. He encontrado que el código fuente de Fluido Migrator es organizado bastante bien.

    Una cosa que usted podría tener que preocuparse acerca de si esta es una aplicación web es asegurarse de que nadie utiliza la base de datos mientras se realiza la migración. He utilizado una estrategia de establecimiento de la conexión, la configuración de la base de datos en modo de usuario único, la ejecución de las migraciones, la configuración de la base de datos a la multi modo de usuario, a continuación, cierre la conexión. Esto también se maneja la hipótesis de un equilibrio de carga de aplicaciones web en varios servidores, por lo 2 servidores no intente ejecutar las migraciones en contra de la misma base de datos.

    • enfoque interesante para jugar con el modo de usuario único y múltiple con el fin de ejecutar una migración.
    • En caso de escenario de un equilibrio de carga de aplicaciones web en varios servidores: se podría crear un paso en el pulpo que ejecuta las migraciones en cada servidor antes de la implementación.

Dejar respuesta

Please enter your comment!
Please enter your name here