2015-06-11 12 views
7

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" } 
     ); 
    } 
} 
+0

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

+0

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) –

+0

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

Odpowiedz

5

podstawie łańcucha komentarze i co wydaje się próbowało, proponuję następujący przebieg działań Uwaga jestem zakładając, że masz magazyn kodu w jakiejś formie (jeśli nie, proszę bac kup swój kod).

  1. Upuść bazę danych, o której mowa.
  2. Zamknij wszystkie kopie Visual Studio.
  3. Usuń źródło z folderu rozwiązania (wszystko, nic nie pozostawiaj).
  4. Extract kopię kodu z magazynu kodu (Pull, Get etc)
  5. odbudować roztworowi
  6. uruchomić polecenie z update-database i uruchomić projekt.

Jeśli to nie naprawi twojego projektu, to moim zdaniem byłby to problem z instalacją Visual Studio (przeinstaluj, mam nadzieję, że nie).

Powodzenia.

+1

Wydaje się, że to rozwiązało problem. Historia migracji jest "gdzieś" w moich folderach roboczych, ale nie wiem gdzie. Wielkie dzięki! –

+0

Zrobiło to dla mnie zamknięcie i ponowne otwarcie. – AGoodDisplayName

+0

Potwierdzono, to rozwiązało ten sam problem, który otrzymywałem. – Ellis

Powiązane problemy