2012-09-09 12 views
15

Trabajo en un equipo de 4 desarrolladores que usan EF5, todos trabajan en su propia base de datos local. Hasta ahora hemos estado utilizando migraciones automáticas, pero estamos llegando al punto en el que necesitamos lanzar a producción, por lo que hemos inhabilitado las migraciones automáticas y hemos comenzado a agregar migraciones explícitas basadas en códigos.Actualización: la base de datos intenta hacer una migración automática incluso con migraciones automáticas deshabilitadas

aquí está el problema: me encontré con el comando Update-Database después de un desarrollador crea una nueva migración explícita y me sale el siguiente error:

Applying code-based migrations: [201209080142319_CreatedDate.LastModifiedDate.Additions]. 
Applying code-based migration: 201209080142319_CreatedDate.LastModifiedDate.Additions. 
Applying automatic migration: 201209080142319_CreatedDate.LastModifiedDate.Additions_AutomaticMigration. 
Automatic migration was not applied because it would result in data loss. 

¿Por qué aparece este error aunque he migraciones automáticas con discapacidad ? Puedo solucionar este error eliminando la migración explícita y luego volviéndola a andamiar (ejecutando Add-Migration). Entonces Update-Database funciona bien y no menciona nada acerca de 'Migración automática ...' Además, el código en la migración creada por mí cuando ejecuto Add-Migration es idéntico al creado por mi compañero de equipo. No veo por qué incluso intenta hacer una migración automática desde AutomaticMigrationsEnabled = false;.

¿Qué me falta aquí?

Respuesta

20

Odio responder mi propia pregunta pero volví a encontrar este problema. Un desarrollador de mi equipo volvió a habilitar las migraciones automáticas en su máquina local y luego creó una migración explícita, que reprodujo este comportamiento tan pronto como lo ejecuté.

marco Entidad siempre ejecutar una migración automática antes de que se ejecuta una migración explícita que tiene la propiedad Source definido en el archivo de .resx, incluso siAutomaticMigrationsEnabled = false. Una migración explícita solo tendrá establecida la propiedad Source si se crea después de que se haya ejecutado una migración automática.

El resultado es que deshabilitar las migraciones automáticas solo significa que EF no actualizará automáticamente su esquema cuando detecte cambios en el modelo, pero aún podría hacer una migración automática si necesita llenar un espacio entre algunas migraciones explícitas. Para evitar este comportamiento, no use una combinación de migraciones automáticas y migraciones explícitas.

1

AutomaticMigrationEnabled = false impide que su aplicación actualice la base de datos por sí mismo. Pero la Base de datos de actualización comprueba el estado actual de la base de datos y luego ejecuta todos los pasos de migración que aún no están en la base de datos, incluidos los cambios en el modelo (dbContext) que no tienen un código basada en la migración aún.

Supongo que hay un cambio en el modelo que podría causar la pérdida de datos.

Puede usar el parámetro -force para aplicar los cambios aún cuando haya pérdida de datos.

0

Mi equipo ha experimentado algo que puede estar relacionado con esto. Si dos miembros del equipo agregan una migración, verifican su código, obtienen la última actualización y luego realizan la actualización de la base de datos, la segunda recibirá un error porque hay una migración "omitida": su sistema considera que nunca se implementó la migración del miembro del equipo. .

Hemos comenzado a revisar todo y obtener las últimas, haciendo la base de datos de actualizaciones (si un miembro del equipo agregó una nueva migración), luego haciendo add-migration, update-database, check-in.

3
public class Configuration : DbMigrationsConfiguration<bailencasino.com.dal.Context.BlncnoContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

Añadir AutomaticMigrationDataLossAllowed = true; por lo que asumen que desea permitir EF para añadir objetos quitar SQL que resultan en la pérdida de datos.

+9

Esta pregunta se trata de que EF aplique una migración automática incluso cuando están claramente deshabilitados. Nunca quiero que se ejecuten migraciones automáticas y, especialmente, no quiero que EF pierda automáticamente mis datos. –

Cuestiones relacionadas