Как полностью сбросить всю историю миграции 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();
    }
}

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

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: 

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

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

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

Откуда, черт возьми, они берутся?

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

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" }
        );
    }
}
7 голосов | спросил O'Rooney 12 J0000006Europe/Moscow 2015, 02:41:34

1 ответ


0

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

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

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

Удачи.

ответил miltonb 12 J0000006Europe/Moscow 2015, 09:37:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132