update net migraciones migracion habilitar framework first español code asp entity-framework ef-migrations

entity-framework - net - update database entity framework code first



Las migraciones de datos de EF no detectarán cambios al agregar una nueva migración (13)

Acabo de tener el mismo problema pero descubrí que mi nuevo campo se agregó como una variable miembro y no una propiedad; faltaba el {obtener; set;} parte y eso hace que la migración salte ese campo.

Puede que no sea tu caso, pero podría ayudar a alguien más.

Estoy utilizando las migraciones de datos de Entity Framework 5.0 junto con el código primero. Cuando agrego un nuevo campo a mi modelo y ejecuto el siguiente comando en la consola del administrador de paquetes.

"Add-migration AddedField"

Todo lo que obtengo es una migración vacía llamada "n_AddedField", los métodos de subir y bajar no contienen lógica.

Probé un montón de cosas, reinstalé el paquete EF nuget, limpié mi solución, reconstruí y eliminé manualmente todos los archivos y directorios generados.

Entonces decidí que desecharía todas mis migraciones y volvería a empezar, y luego se puso raro. Después de eliminar todas mis migraciones y la tabla de historia de la migración en la base de datos, recreé la base de datos utilizando el inicializador CreateDatabaseIfNotExists. Después de hacer esto, debería poder crear una nueva migración inicial. Pero cuando intento crear una nueva migración, aparece un error que dice que hay migraciones pendientes y enumera todas las migraciones que acabo de eliminar de mi proyecto.

No tengo idea de por qué y cómo EF todavía tiene algún recuerdo de esas migraciones. Incluso intenté buscar en los contenidos de los archivos buscando si las migraciones se guardaron en algún otro lugar o algo así. Pero nada..

Las migraciones de datos se ven realmente claras cuando Scott Hansleman se presentó en el escenario, pero para un trabajo real, estoy empezando a buscar alternativas.

Cuando se inició el proyecto, estábamos usando EF 4.x y hace un tiempo pasamos a 5.0, pero desde el cambio he agregado un montón de migraciones con éxito.

¿Alguien tiene alguna idea de cómo resolver este problema? Básicamente, solo quiero poder agregar migraciones y generar un script de SQL con los cambios.


Agregué una nueva clase a mi modelo de datos a un subdirectorio, el espacio de nombres resultante no estaba visible para los andamios utilizando la migración por adición.

La solución fue cambiar el nombre del espacio de nombres de la nueva clase para ajustarse al resto del modelo y / o agregar "DbSet virtual público ...", etc. a su clase de contexto de entidad, lo que requerirá que haga referencia a este nuevo espacio de nombres, luego ejecute add- la migración de nuevo.


El problema en mi caso fue causado por:

  1. Crear una migración (con éxito)
  2. Decida que quiero volver a crearlo y elimine el archivo .cs migración.
  3. Intente regenerarlo y termine con las funciones Down y Up la migración vacía.

En este caso, me olvidé de eliminar también las entradas ApplicationDbContextModelSnapshot.cs para los cambios del modelo. Eliminar los nuevos mapeos en este archivo resolvió mi problema y luego se generó correctamente.


En mi caso fue porque había agregado un contexto secundario ''ApplicationDbContext'' como parte de la identidad de ASP.net. Cuando ejecuté el comando ''habilitar migraciones'' nuevamente, recibí el error de que había más de un contexto. Una vez que combiné las dos cosas volví a funcionar.


La opción de compilación por lotes -> limpia no funcionó para mí.

Resolví el problema por:

  1. Creación de una migración con ''Add-Migration NameOfMigration''
  2. Eliminar los contenidos de las funciones arriba y abajo de la clase de migración creada.
  3. Actualizar la base de datos ejecutando el script de migración (que solo agregará una fila a la tabla _MigrationHistory con ''Update-Database -Verbose''

La aplicación web ahora se ejecuta correctamente, por lo que esencialmente tuve un problema que se solucionó agregando solo metadatos.


No estás sincronizado (Db, migraciones, código) y puedes esperar todo tipo de problemas como ese.

Hice esto un million times (casi :) y funciona muy bien, pero necesitas ir con firmeza y ser meticuloso con lo que estás haciendo.

Puede leer este ''resumen'' que hice - comience a mitad de camino en algún lugar (pero también verifique la conexión).

Codificar primero crear tablas

... y si no funciona, te sugiero que hagas un pequeño escenario / modelo ''repetible'' - publica exactamente lo que tienes.

Cómo funcionan las migraciones:

Las migraciones están vinculadas a la ''tabla de migración''.

Cuando se ejecuta Add-Migration (verifica la estructura de la base de datos existente y la tabla de migración) y hace que la "diferencia" (a veces no hay ninguna "arriba" o "simplemente" también porque están sincronizados).

Por lo tanto, cada "migración" es una diferencia compleja entre su código, las migraciones existentes, la base de datos y la tabla de migración. Aparte de eliminar la base de datos, no hay nada más que restablecer, la tabla de ''migración'' de Db puede no ser suficiente, eso no garantiza una ''limpieza'' completa (si es posible, siempre elimino Db completo). También necesitas borrar tus migraciones de código.

Asegúrese de "compilar" los proyectos (lo mejor es hacerlos compilar automáticamente en la configuración) después de / antes de que sea relevante.

Asegúrese de que su ''conexión'' coincida.

Una vez que todo está sincronizado, todo debería funcionar bien, pero debes mantenerlo sincronizado. A menos que planee eliminar la Db (prueba), no elimine las migraciones así (puede usar Update-Database -0 (creo) para volver a la migración (esto es ''estado cero'').


Parece que logré resolver el problema moviendo los modelos y la clase de contexto a otro proyecto.

Todavía no tengo idea de por qué sucedió esto, y esta solución realmente no es ninguna solución :(


Tal vez el más estúpido de todos:

Estaba agregando una migración con el mismo nombre que el nuevo objeto que estaba creando.


Tuve que eliminar la tabla _MigrationHistory generada por EF. Luego ejecuté la migración de nuevo de nuevo. Sin embargo, tenga cuidado con esto, ya que generará las consultas necesarias desde cero, incluidas las tablas que ya están allí.


Tuve un problema similar a este, donde el uso del indicador -force en add-migration por add-migration para volver a armar una migración existente dejó de funcionar sin ninguna razón aparente.

No importa lo que hice, obtuve el estúpido "No se puede generar una migración explícita porque las siguientes migraciones explícitas están pendientes" mensaje de error. Después de probar casi todo lo que podía pensar y detenerme justo antes de romper mi computadora portátil en pedazos, de la desesperación ejecuté nuevamente las enable-migrations y, por supuesto, obtuve el mensaje "Las migraciones ya se han habilitado en el mensaje del proyecto ''Blah.Blah''". Intenté add-migration -force nuevo y mágicamente estaba funcionando.

No tengo idea de lo que cambió, debe haber sido alguna configuración de usuario / archivo de configuración fuera del control de origen. Esperemos que esto ayude a alguien más.


Tuve un problema similar en el que no se encontraba una nueva migración, por lo que update-database me estaba dando el siguiente error sin importar lo que hice:

Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration. You can use the Add-Migration command to write the pending model changes to a code-based migration.

Al hacer una "limpieza por lotes", se resolvió mi problema, sugiriendo que EF estaba usando un conjunto antiguo / inválido de una carpeta diferente a la ''configuración de solución seleccionada actualmente (por ejemplo, DEBUG)''.

Para hacer un lote de limpieza:

  1. Seleccione Main Menu -> Build -> Batch Build...
  2. Haga clic en Select All
  3. Haga clic en Clean

Cerrar el diálogo, reconstruir y volver a intentar la migración.

Espero que esto ayude a alguien más por ahí.


Yo tuve el mismo problema. Las migraciones estaban habilitadas pero no detectaban ningún cambio. Mi solución fue volver a habilitar las migraciones usando el atributo -Force y luego todo funcionó.

Enable-Migrations -ProjectName -StartupProjectName --ConnectionStringName -Force


oops En mi caso, estaba agregando una nueva entidad raíz a la que no hace referencia ninguna otra entidad. El resultado fue simplemente que el código primero no tenía ninguna razón para generar una migración para la entidad. Una vez que agregué el código al DbContext (un dbset) funcionó a la perfección.