.net - tipos - update database force
¿Cómo restablecer por completo todo el historial de migración de Entity Framework 6?(¡Migraciones Zombie!) (1)
Version corta:
Después de eliminar toda la base de datos (incluyendo __MigrationHistory) Y todas las migraciones en la solución ... de alguna manera, ¡las migraciones con nombre se encuentran en algún lugar y son aplicadas por DbMigrator! ¿¿¿De dónde están viniendo???
Versión larga:
Estamos utilizando Entity Framework 6, en contra de SQL Server 2012. Es una aplicación web MVC, y estamos usando migraciones basadas en código, y tenemos un historial moderadamente largo de migraciones en este punto. Ejecutamos migraciones al inicio:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();
}
}
En varias PC funciona bien, pero en una sola PC nueva , tengo problemas donde parece estar fuera de sincronía de alguna manera. Cada vez que se ejecuta la aplicación, se queja de que hay cambios pendientes.
System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException occurred
HResult=-2146233088
Message=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.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update()
at CVInsights.MvcApplication.Application_Start() in c:/Work/ClearVision/CVO/CVInsights/Global.asax.cs:line 20
InnerException:
Pero ejecutar add-migration no muestra cambios, y la base de datos de actualización no hace nada.
Entonces, renunciando por el momento, quería "reiniciar" por completo las migraciones de EF. Así que borré toda la base de datos (obviamente incluyendo la tabla __MigrationHistory). Y eliminé todas las migraciones de la carpeta IDE Migrations.
Ahora ... cuando inicio nuestra aplicación en esta nueva PC ... ¡el DbMigrator todavía encuentra y aplica un montón de migraciones nombradas de algún lado! No es la lista completa que tenemos actualmente (en nuestro control de fuente), pero es la lista hasta cierto punto hace algunas semanas. Después de aplicar algunas de estas "migraciones de zombis", arroja la misma vieja excepción "
¿De dónde diablos vienen?
Siento que debo estar haciendo algo muy estúpido, o la PC está fundamentalmente desordenada ...
Configuration.cs:
public sealed class Configuration : DbMigrationsConfiguration<CloudDatabase.DAL.DatabaseContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(CloudDatabase.DAL.DatabaseContext context)
{
context.Roles.AddOrUpdate(role => role.ID, // This is the primary key or the table we are adding to or updating.
new Role() { ID = 1, Name = "A role" },
new Role() { ID = 2, Name = "another role" },
new Role() { ID = 3, Name = "third role" }
);
}
}
Basado en la cadena de comentarios y lo que parece haber intentado, sugeriría el siguiente curso de acción. Tenga en cuenta que supongo que tiene una tienda de códigos de algún tipo (si no, haga una copia de seguridad de su código).
- Suelta la base de datos en cuestión.
- Cierre todas las copias de Visual Studio.
- Elimine la fuente de su carpeta de solución (todo, no deje nada atrás).
- Extraiga una copia del código de su tienda de códigos (Pull, Get, etc.)
- Reconstruir la solución
- Ejecute el comando
update-database
y ejecute su proyecto.
Si eso no soluciona su proyecto, supongo que es un problema con la instalación de Visual Studio (vuelva a instalar, espero que no).
Buena suerte.