2010-11-16 15 views
9

Me falta algo básico.La migración de FluentMigrator tiene éxito, pero no hay cambios en DB

Estoy trabajando en un proyecto de legado, y estoy tratando de llevar FluentMigrator en la causa mezcla Tengo algo interesante base de datos cambios y migraciones de datos que suben que creo que será mucho más fácil mediante usando esta herramienta

Para la migración inicial, solo quiero llevar la base de datos a la versión de producción actual , tal como está. Para simplificar la migración inicial, programé mi base de datos SQL Server 2008, y la migración ejecuta los comandos con guiones como una serie de comandos SQL.

Para probarlo, se crea una base de datos completamente vacío, y tratar de ejecutarlo desde la línea de comandos usando la siguiente:

> migrate -a "C:\My\Project\Path\bin\debug\Rds.MyProjName.DBMigrations.dll" 
-db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2008;Initial Catalog=myNewDbName; 
Integrated Security=SSPI" -version=20100901000000 

La versión especificada es la marca de tiempo en atributo de Migración la primera de la clase de migración.

En la línea de comandos, todo parece funcionar bien - la totalidad de la secuencia de comandos enfoca cerca, y termina con:

-- CreateProductionDbCircaSep2010: migrated 

Sin embargo, cuando tomo un vistazo a la base de datos, que todavía está vacía . Absolutamente no hay nada allí. Hasta mi método es el siguiente:

public override void Up() 
{ 
    var cmds = LoadEmbeddedResources 
     .GetEmbeddedResource("scripted_db_2010-09-01.sql") 
     .AsString() 
     .ParseCommands(); 

    foreach (var c in cmds) { 
     Execute.Sql(c); 
    } 

    CreateReferenceData(); 
} 

(FYI, estoy analizar la secuencia de comandos en lugar de ejecutarlo como está porque empecé utilizando Migrator.Net antes de descubrir que estaba muerto, y esto ya era configurar.)

¿Alguien puede ayudarme? Casi parece como una transacción no es cometer, o alguna opción de línea de comando para tener la migración de hacer una carrera en seco está activada, pero yo no lo veo ...

EDIT: Adicional cosas que he intentado

Para confirmar que la cadena de conexión estaba usando la base de datos que esperaba, cambié el nombre de la base de datos y luego obtuve un error de inicio de sesión, como se esperaba.

Para más pruebas, me cortaron la longitud de la secuencia de comandos, e intentaron ejecutarlo utilizando

public override void Up() 
{ 
    Execute.Script(@"..\Resources\test.sql"); 
} 

en lugar de comando por comando, pero me da los mismos resultados. Aquí está la salida en esa prueba (nota, he editado los pathes y tal):

C:\My\Project\Path\FluentMigrator.Net\ >migrate -a "C:\My\Project\Path\bin\debug 
\My.Project.DBMigrations.dll" -db SqlServer2008 -conn "Data Source=.\SQLEXPRESS2 
008;Initial Catalog=myNewDbName;Integrated Security=SSPI" -version=2010090100000 
0 
Using Database SqlServer2008 and Connection String Data Source=.\SQLEXPRESS2008; 
Initial Catalog=myNewDbName;Integrated Security=SSPI 
-- VersionMigration: migrating =============================================== 

-- CreateTable VersionInfo 
-- VersionMigration: migrated 
-- CreateProductionDbCircaSep2010: migrating ================================= 

-- ExecuteSqlScript C:\My\Project\Path\FluentMigrator.Net\..\Resources\test.sql 
-- CreateProductionDbCircaSep2010: migrated 

Sin embargo, no hay tablas en la base de datos - no hay ni siquiera la mesa VersionInfo esperado.

Respuesta

19

Después de algunas investigaciones y pruebas con la versión 0.8 y 1.0, parece que se trata de un error en FluentMigrator.Net relacionado con la gestión de transacciones del corredor de migración: si ejecuta una migración con un número de versión específico, llamado; si no especifica un número de versión, está bien.

EDIT:

he presentado ya un parche para el proyecto, que fue aceptada. Esto ya no es un problema.

+1

Voy a intentar montar un parche para el proyecto cuando tenga tiempo. –

+9

+1 por enviar un parche –

14

Esto suena muy estúpido, pero desperdiciaron varias horas en él, por lo que pertenece aquí:

Asegúrese de que sus clases de migración utilizan visibilidad pública.

Sin esto, sus migraciones serán ignoradas por completo.

+1

¡GRACIAS! Esto me salvó totalmente. –

Cuestiones relacionadas