c# - update - Entity Framework crea una migración vacía pero insiste en que mi modelo es diferente
se han encontrado varios tipos de contexto en el ensamblado (2)
Hoy es un día triste. Lo primero que vi hoy es que la excepción EF dice que " el modelo que respalda el contexto ''DomainContext'' ha cambiado desde que se creó la base de datos. ". Es cerca de la medianoche y todavía veo este error. Este es el final de mi carrera - (
Estoy bastante seguro de que nada ha cambiado en el modelo, sin embargo, apareció el error. Intenté crear una nueva migración, salió vacía:
public void Up()
{
}
public void Down()
{
}
La aplicación de esta migración no sirvió de nada; el error persistió. He utilizado una sugerencia común para establecer que el inicializador sea nulo:
Database.SetInitializer<DomainContext>(null);
Y hizo desaparecer el error cuando accedí a la base de datos. Pero esto me molesta mucho: cada vez que intento ejecutar migraciones a través del código, vuelvo a ver un error similar:
var configuration = new Migrations.Configuration();
configuration.TargetDatabase = new DbConnectionInfo("correct connection string", "System.Data.SqlClient");
var migrator = new DbMigrator(configuration);
migrator.Update(); // <<-- exception is thrown here
El lanzamiento de excepción se ve así: System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException: 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.
He actualizado a EF 6.1 (estaba en 6.0.2 antes), pero esto no hizo ninguna diferencia.
Otra cosa que me molesta es que puedo ejecutar migraciones a través de Nuget Console:
Update-Database
Funciona bien y no da ningún problema. Pero cuando configuro DB initialiser para ejecutar migraciones automáticamente:
var initializer = new MigrateDatabaseToLatestVersion<DomainContext, Migrations.Configuration>();
Database.SetInitializer(initializer);
var domainContext = new DomainContext();
domainContext.Database.Initialize(true); // <<-- this throws exception
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.
La verdadera pregunta es por qué EF tiene hashes diferentes para los modelos cuando se ejecuta a través de la consola Nuget y a través de Migrations DB-Initialiser? ¿Cómo puedo averiguar qué es diferente (modelo de db-state)? ¿Y cómo solucionar esto, así que no tengo que usar hacks (asignar null a db-initaliser)?
La causa de mi problema era un atributo [AllowHtml]
aplicado a uno de los modelos. El problema comenzó a suceder después de actualizar MVC a 5.1.1 y WebApi a 2.1.
Eliminé ese atributo de EF-Model y eliminé y reconstruí la base de datos y el problema desapareció.
Escribí una publicación de blog sobre cómo depurar este tipo de problemas: http://tech.trailmax.info/2014/03/inside_of_ef_migrations/
También creo que este atributo [AllowHtml]
es un error, crearé una solución reproducible y enviaré el informe de error a EF-people.
Actualización : en realidad, nunca podría reproducir el error. [AllowHtml]
en las propiedades de clase no tiene nada que ver con eso. Un error mágico que fue.
Tuve el mismo problema hoy. Agregué antes de que apareciera el problema ViewModel, a View y Html.EnableClientValidation ()
¡No hubo ningún cambio en el Modelo! Hice un cambio fingido, como aconsejó @Guilleon, y creé una Migración en funcionamiento ... pero no ayudó.
Luego reinicié el Visual Studio y todo funcionó de nuevo. Debe ser un problema