varios update tipos migrations migraciones han habilitar framework first ensamblado encontrado contexto code entity-framework ef-migrations

entity framework - update - atrapado en el limbo de la migración EF



update database entity framework code first (5)

de alguna manera he conseguido que mi proyecto EF5 llegue a un estado en el que no puedo continuar.

Cuando hago una ''actualización-base de datos'' obtengo:

No se puede actualizar la base de datos para que coincida con el modelo actual porque hay cambios pendientes y la migración automática está deshabilitada. Escriba los cambios del modelo pendientes en una migración basada en código o habilite la migración automática. Establezca DbMigrationsConfiguration.AutomaticMigrationsEnabled en true para habilitar la migración automática. Puede usar el comando Agregar-Migración para escribir los cambios del modelo pendiente en una migración basada en código.

ok, bien, entonces trato de ''agregar-migrar'', y obtengo:

No se puede generar una migración explícita porque las siguientes migraciones explícitas están pendientes: []. Aplique las migraciones explícitas pendientes antes de intentar generar una nueva migración explícita.

20 GOTO 10 ??

¿Qué se supone que debo hacer en este momento? (Más allá de cambiar a NHibernate?)


Cambié el siguiente valor en mi clase Configuration.cs de false a true .

AutomaticMigrationsEnabled = true;

En la carpeta App_Data cambié el nombre de la base de datos de mi proyecto, el archivo con la terminación .mdf (para que se cree uno nuevo) y en la consola del Administrador de paquetes escribí el siguiente comando:

actualizar base de datos

después de lo cual las migraciones pendientes se desarrollaron sin problemas.

Tenga en cuenta que esto funcionó para mí, pero no estoy al 100% si esta es la mejor práctica. En cualquier caso, esta primera guía del Código del Entity Framework para migraciones dice:

"Si aparece un error que indica que una tabla ya existe y no se puede crear, es probable que sea porque ejecutó la aplicación después de eliminar la base de datos y antes de ejecutar la actualización de la base de datos. En ese caso, elimine el archivo Movies.mdf de nuevo y vuelva a intentar el comando update-database. Si aún recibe un error, elimine la carpeta de migraciones ... "

También sobre AutomaticMigrationsEnabled = true; este artículo de MSDN, Puntos de datos: Un primer misterio de las migraciones de código: Solucionado dice "Las migraciones se pueden ejecutar automáticamente, lo que significa que los cambios del modelo se descubrirán y las migraciones correspondientes a los cambios se crearán y ejecutarán en la base de datos. Inicialización de la base de datos. Las migraciones automáticas son prácticas para aplicaciones simples, pero usted tiene muy poco control sobre ellas y normalmente no recomiendo habilitarlas. Me alegré cuando Code First cambió el valor predeterminado a falso. "


Entendí esto por

  • Ejecute "Update-Database -Script -Force"
    • tenga en cuenta la última migración explícita intentada antes del error "No se puede actualizar la base de datos ..."
  • Ejecute "Update-Database -Script -TargetMigration [lastmigration]" utilizando la última migración observada en el intento anterior

Podría ejecutar el script y agregar una nueva migración. Esto está en EF6 y Nuget 2.8. Puede que no haya funcionado cuando se publicó la pregunta.


Lo que funcionó para mí fue:

  1. Revertir todos mis cambios (hacer una copia de seguridad primero) a un buen estado conocido.
  2. Haciendo add-migration DummyMigration . Eso produjo algunos cambios espurios que comenté
  3. Se llamó update-database para agregar los metadatos de migración a la tabla [__MigrationHistory] .
  4. Realice los cambios que necesitaba (de la copia de seguridad del código que tomé antes).
  5. Haga la add-migration - update-database / update-database normal.

No es ideal, y sería genial ver si hay una solución mejor, pero eso funcionó para mí.


Me equivoqué en la base de datos de creación

using System.ComponentModel.DataAnnotations; using System.Globalization; namespace ProductsManager.Models { public class Product { public int ProductId { get; set; } public string Name { get; set; } public string Description { get; set; } public string Production { get; set; } public string Size { get; set; } public decimal<--- Price { get; set; } public string Barcode { get; set; } } }

después de la migración de la adición Inicial realicé y cambié el código a public int Price {get; conjunto; } hizo la misma migración de datos DummyMigration y se creó en la carpeta de migración 080372472_dummyMigration

namespace IdetityBeta.Migrations { using System; using System.Data.Entity.Migrations; public partial class DummyMigration : DbMigration { public override void Up() { AlterColumn("dbo.Products", "Price", c => c.String()); } public override void Down() { AlterColumn("dbo.Products", "Price", c => c.Decimal(nullable: false, precision: 18, scale: 2)); } } }

Entonces, la base de datos de actualización y el problema se resolvieron


Para mí, el problema era que habíamos cambiado el nombre del espacio de nombre de la migración 2014123456_Initial.cs.
Pero VS no había regenerado el espacio de nombres en su 2014123456_Initial.Designer.cs asociado.

Una vez que se modificó Designer.cs para usar el mismo espacio de nombres, todo comenzó a funcionar nuevamente.

(También publicó esto como una respuesta aquí porque ambas preguntas son muy similares)