2013-06-06 10 views
23

jakoś udało mi się uzyskać projekt EF5 w stanie, w którym nie mogę kontynuować.utknąłem w limicie migracji EF

Kiedy zrobić „update-bazy” i otrzymujemy:

Nie można zaktualizować bazy danych, aby sprostać obecnym modelu, ponieważ nie są oczekujące zmiany i automatyczna migracja jest wyłączone. Napisz oczekujące zmiany modelu na migrację opartą na kodzie lub włącz automatyczną migrację. Ustaw DbMigrationsConfiguration.AutomaticMigrationsEnabled na true, aby włączyć automatyczną migrację. Możesz użyć polecenia Dodaj-Migracja, aby zapisać oczekujące zmiany modelu na migrację opartą na kodzie.

ok, w porządku, więc staram się „dodatek migracji”, a ja dostać:

Nie można wygenerować wyraźny migrację ponieważ następujące wyraźne migracje są w toku: []. Zastosuj oczekujące jawne migracje przed próbą wygenerowania nowej jawnej migracji.

20 GOTO 10 ??

co mam teraz zrobić? (Poza włączeniem do NHibernate?)

+0

Jeśli w ogóle masz jakiekolwiek migracje, nawet te początkowe, spróbuj skomentować kod i uruchomić projekt, co czasami pomija ten błąd: –

+0

@ Davy8 Czy możesz zrobić "Update-Database -Force"? – Kittoes0124

+0

@Kittoes Próbowałem, ale nie ma kostki.Miałem ten sam błąd.Próbowałem również '-Force' na migracji migracji bez powodzenia.Jedyny sposób mam go do pracy była to odpowiedź, którą napisałem, jest nieporządna, ale działa, chciałbym usłyszeć o mniej brzydkich rozwiązaniach – Davy8

Odpowiedz

6

Co pracował dla mnie było:

  1. Przywracanie wszystkie moje zmiany (tworzenia kopii zapasowej pierwszy) Powrót do znanej dobrym stanie.
  2. Doing add-migration DummyMigration. To spowodowało kilka fałszywych zmian, które skomentowałem:
  3. Zwołano update-database, aby dodać metadane migracji + do tabeli [__MigrationHistory].
  4. Dokonaj zmian, których potrzebowałem (z kopii zapasowej kodu, który wykonałem wcześniej).
  5. Wykonaj normalny add-migration/update-database.

Nie idealny i byłoby fajnie zobaczyć, czy jest lepsze rozwiązanie, ale to zadziałało.

+0

Powodem, dla którego to działa, jest to, że 'DummyMigration' zawiera ukryte metadane, które zgłaszają stan DB. Jeśli chcesz, możesz faktycznie opróżnić wszystko, co zostanie wygenerowane metodami Up/Down, aby zapobiec ich ponownemu uruchomieniu. na przykład w moim przypadku chciałem odtworzyć wszystkie moje stoły, co zdecydowanie nie było w porządku. W drugiej migracji można wykonać dowolne aktualizacje, które mają miejsce po pierwszej migracji w stanie DB. – jocull

1

Dla mnie problemem było to, że zmieniliśmy nazwę obszaru migracji 2014123456_Initial.cs.
Ale VS nie zregenerował przestrzeni nazw w skojarzonym pliku 2014123456_Initial.Designer.cs.

Po zmianie nazwy pliku Designer.cs na tę samą przestrzeń nazw, wszystko zaczęło działać ponownie.


(pisał w tym również jako odpowiedź here ponieważ oba pytania są tak podobne)

0

zrobiłem błąd w bazie tworzenia

using System.ComponentModel.DataAnnotations; 
    using System.Globalization; 
    namespace ProductsManager.Models 
    { 
     public class Product 
     { 
      public int ProductId { get; set; } 
      public string Name { get; set; } 
      public string Description { get; set; } 
      public string Production { get; set; } 
      public string Size { get; set; } 
      public decimal<--- Price { get; set; } 
      public string Barcode { get; set; } 
     } 
    } 

Po początkowym dodatek migracji zdałem sobie sprawę i zmienił kod do public int Cena {get; zestaw; } tak samo DummyMigration dodatek migracji i jej utworzony w folderze migracji 080372472_dummyMigration

namespace IdetityBeta.Migrations 
{ 
    using System; 
    using System.Data.Entity.Migrations; 

    public partial class DummyMigration : DbMigration 
    { 
     public override void Up() 
     { 
      AlterColumn("dbo.Products", "Price", c => c.String()); 
     } 

     public override void Down() 
     { 
      AlterColumn("dbo.Products", "Price", c => c.Decimal(nullable:    false, precision:    18, scale: 2)); 
     } 
    } 
} 

Więc został rozwiązany update-baza i problemem

0

dotarłem wokół tego przez

  • Run „Aktualizacja -Database -Script -Force "
    • zanotuj ostatnią jawną próbę migracji przed błędem "Nie można zaktualizować bazy danych ..."
  • Run "Update Database -script -TargetMigration [lastmigration]" za pomocą ostatnia migracja zauważyć z poprzedniej próbie

Mógłbym wtedy uruchomić w skrypcie i dodaj nową migrację. To dotyczy EF6 i Nuget 2.8 - może nie zadziałało, gdy pytanie zostało opublikowane.

0

Zmieniłem następującą wartość w mojej klasie Configuration.cs z false na true.

AutomaticMigrationsEnabled = true; 

W App_Data Folder I przemianowany bazę mojego projektu - plik z .mdf kończąc (a więc nowa zostanie utworzona), w Package Manager Console wszedłem następujące polecenie:

update-baza

po którym oczekujące migracje przebiegało sprawnie.

Pamiętaj, że to zadziałało, ale nie jestem 100%, jeśli to najlepsza praktyka. W każdym razie ten przewodnik po migracji dla Entity Framework Code First mówi:

"Jeśli pojawi się błąd wskazujący, że tabela już istnieje i nie można jej utworzyć, prawdopodobnie jest to spowodowane uruchomieniem aplikacji po usunięciu bazy danych i przed wykonany update-bazy danych. W tym przypadku, należy usunąć plik Movies.mdf ponownie i ponów polecenie update-bazy danych. Jeśli nadal pojawia się błąd, usuń folder migracje ..”

także o AutomaticMigrationsEnabled = true; to MSDN article, Data Points : A Code First Migrations Mystery: Solved mówi "Migracje mogą być uruchamiane automatycznie, co oznacza, że ​​zostaną wykryte zmiany modelu, a migracje odpowiadające zmianom zostaną utworzone i wykonane w bazie danych. dzieje się to w czasie wykonywania podczas inicjalizacji bazy danych. Automatyczne migracje są przydatne w prostych aplikacjach, ale masz nad nimi niewielką kontrolę i zazwyczaj nie polecam ich włączania.Byłem szczęśliwy, gdy Code First zamienił domyślną wartość na false. "

Powiązane problemy