wersja skrócona:Jak całkowicie zresetować całą historię migracji Entity Framework 6? (migracje Zombie!)
Po usunięciu całej bazy danych (łącznie __MigrationHistory) i wszystkie migracje w roztworze ... jakoś nazwane migracje znajdowane są gdzieś i stosowany DbMigrator! Skąd pochodzą?
Długa wersja:
Jesteśmy przy użyciu Entity Framework 6, przed SQL Server 2012. Jest to webapp MVC i używamy migracje kodu opartego i mamy umiarkowanie długą historię migracji na ten punkt. Prowadzimy migracje przy starcie:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();
}
}
na kilku komputerach to działa dobrze, ale tylko na jednym nowego PC, mam problemy, gdzie wydaje się z synchronizacji w jakiś sposób. Za każdym razem, gdy aplikacja działa, narzeka, że są oczekujące zmiany.
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:
Ale uruchomienie migracji add nie pokazuje żadnych zmian, a baza danych aktualizacji nic nie robi.
Tak więc, rezygnując z chwili, chciałem "zresetować" migracje EF w pełni. Usunąłem więc całą bazę danych (oczywiście zawierającą tabelę __MigrationHistory). Usunąłem wszystkie migracje z folderu IDE Migrations.
Teraz ... kiedy uruchamiam naszą aplikację na tym nowym komputerze ... DbMigrator wciąż znajduje i wyszukuje skądś nazwane migracje! Nie jest to pełna lista, którą mamy obecnie (w naszej kontroli źródła), ale jest to lista do pewnego punktu kilka tygodni temu. Po zastosowaniu niektórych z tych „migracje zombie”, to ten sam stary rzuca wyjątek "
Gdzie do cholery są one pochodzących z ??
czuję, że musi być coś bardzo głupiego robi, czy komputer jest fundamentalnie pomieszane ...
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" }
);
}
}
Czy na pewno usunąłeś wszystkie migracje (być może niektóre z nich znajdują się w innym folderze)? Wydaje mi się, że to część twoich migracji, a potem próbuje zastosować resztę zmian w twoim kontekście jako automatyczną migrację. Czy posiadasz "bazową" bazę danych, czy też migracje zostały zaprojektowane tak, aby zaczynały się od pustej bazy danych? – vesan
Witaj Vesan. Myślę, że * usunąłem wszystkie migracje. Usunąłem wszystkie pliki datetime_name.cs w folderze Migracje. Brak podfolderów. Wciąż jest plik configuration.cs z niezbyt dużą ilością. Migracje rozpoczynają się od pustej bazy danych - jak już powiedziałem, usuwam całą bazę danych, aby rozpocząć. Automatyczne migracje są wyłączone. (AutomaticMigrationsEnabled = false; w configuration.cs) –
Hmm to brzmi jakbyś zakrył prawie wszystko. Czy sprawdziłeś rzeczywistą bibliotekę DLL, która działa z ildazmem/reflektorem, aby upewnić się, że jest właściwa, a nie stara kompilacja czy coś takiego? Być może możesz też spróbować zarejestrować migrację, jeśli nie powie Ci ona czegoś użytecznego (patrz [tutaj] (http://stackoverflow.com/questions/24357963)). W przeciwnym razie nie mam więcej pomysłów. Mam nadzieję, że ktoś będzie w stanie pomóc. – vesan