Как полностью сбросить всю историю миграции Entity Framework 6? (Миграция зомби!)

короткая версия:

после удаления всей базы данных (включая __MigrationHistory) и всех миграций в решении... каким-то образом именованные миграции находятся где-то и применяются DbMigrator! Откуда они берутся???

версия:

мы используем Entity Framework 6 против SQL Server 2012. Это веб-приложение MVC, и мы используем миграции на основе кода, и у нас умеренно длинная история миграций в этот момент. Мы запускаем миграции при запуске:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        ...

        var configuration = new Configuration();
        var migrator = new DbMigrator(configuration);
        migrator.Update();
    }
}

на нескольких ПК он работает нормально, но только на одном новая PC, у меня есть проблемы, где это кажется из синхронизации в некотором роде. Всякий раз, когда приложение работает, он жалуется, что есть ожидающие изменения.

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:WorkClearVisionCVOCVInsightsGlobal.asax.cs:line 20
InnerException: 

но запуск add-migration не показывает никаких изменений, а update-database ничего не делает.

Итак, отказавшись на данный момент, я хотел "сбросить" миграции EF полностью. Поэтому я удалил вся база данных (очевидно, включая таблицу __MigrationHistory). И я удалил все миграции из папки миграции IDE.

сейчас... когда я запускаю наше приложение на этом новом ПК... DbMigrator все еще находит и применяет кучу именованных миграций откуда-то! Это не полный список, который у нас есть в настоящее время (в нашей системе управления версиями), но это список до определенного момента несколько недель назад. После применения некоторых из этих "миграций зомби" он выдает то же самое старое исключение "

Где, черт возьми, они идут??

Я чувствую, что я должен делать что-то очень глупое, или ПК принципиально напутал...

конфигурации.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" }
        );
    }
}

1 ответов


основываясь на цепочке комментариев и на том, что вы, похоже, пробовали, я бы предложил следующий курс действий. Обратите внимание, что я предполагаю, что у вас есть хранилище кода какой-либо формы (если нет, сделайте резервную копию кода).

  1. отбросьте базу данных, о которой идет речь.
  2. закройте все копии Visual Studio.
  3. удалите источник из папки решения (все это, ничего не оставляйте позади).
  4. извлеките копию кода из вашего хранилища кода (потяните, получите и т. д.)
  5. перестроить решение
  6. запустить update-database команда и запустить проект.

Если это не исправит ваш проект, то я предполагаю, что это будет проблема с установкой Visual Studio (переустановка, я надеюсь, нет).

удачи.