Как полностью сбросить всю историю миграции 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 ответов
основываясь на цепочке комментариев и на том, что вы, похоже, пробовали, я бы предложил следующий курс действий. Обратите внимание, что я предполагаю, что у вас есть хранилище кода какой-либо формы (если нет, сделайте резервную копию кода).
- отбросьте базу данных, о которой идет речь.
- закройте все копии Visual Studio.
- удалите источник из папки решения (все это, ничего не оставляйте позади).
- извлеките копию кода из вашего хранилища кода (потяните, получите и т. д.)
- перестроить решение
- запустить
update-database
команда и запустить проект.
Если это не исправит ваш проект, то я предполагаю, что это будет проблема с установкой Visual Studio (переустановка, я надеюсь, нет).
удачи.