Short version:
After deleting the entire database (including __MigrationHistory) AND all the migrations in the solution... somehow, named migrations are being found somewhere and applied by DbMigrator! Where are they coming from???
Long version:
We are using Entity Framework 6, against SQL Server 2012. It's an MVC webapp, and we are using code-based migrations, and we have a moderately long history of migrations at this point. We run migrations at startup:
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { ... var configuration = new Configuration(); var migrator = new DbMigrator(configuration); migrator.Update(); } } On several PCs it is working fine, but on just one new PC, I have problems where it seems out of synch in some way. Whenever the app runs, it complains that there are pending changes.
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: But running add-migration shows no changes, and update-database does nothing.
So, giving up for the moment, I wanted to "reset" EF migrations fully. So I deleted the entire database (obviously including the __MigrationHistory table). And I deleted all the migrations from the IDE Migrations folder.
Now... when I start our app on this new PC... the DbMigrator still finds and applies a bunch of named migrations from somewhere! It isn't the complete list we presently have (in our source control), but it is the list up to a certain point a few weeks ago. After applying some of these "zombie migrations", it throws the same old exception "
Where the heck are they coming from??
I feel like I must be doing something very stupid, or the PC is fundamentally messed up...
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" } ); } }