Jak wymusić usunięcie i ponowne utworzenie wybranej tabeli w migracjach typu code-first?


Chcę usunąć tabelę z tysiącem kolumn i pozwolić migracji na jej odtworzenie.
Mogę wystawić
DropTable("MyTableWithManyColumns");

Problem w tym, że robiłbym ręczne tworzenie tabel w ten sposób
CreateTable( "dbo.MyTable",
c => new
{
RowId = c.Int(nullable: false, identity: true),
// many columns follow...
})
.PrimaryKey(t => t.RowId);

Najłatwiejszym sposobem jest użycie programu SSMS i kliknięcie prawym przyciskiem myszy Upuść Utwórz tabelę do nowego okna i wykonanie stamtąd.
Ale czy istnieje łatwy sposób korzystania z migracji kodu?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Widzę dwie możliwe ścieżki:
  • Usuń tabelę z bazy danych
  • Wygeneruj nową migrację (za pomocą
    Add-Migration
    ). zostanie wygenerowana nowa migracja, tworząc brakującą tabelę
  • Przeprowadź migrację (używając
    Update-Database
    )

OR
  • Usuń jednostkę z kontekstu (pamiętaj, aby usunąć wszystkie relacje z innymi jednostkami)
  • Wygeneruj migrację za pomocą
    Add-Migration
    (wygeneruje sposób na usunięcie tabeli)
  • Migracja za pomocą
    Update-Database
  • Dodaj jednostkę do kontekstu
  • Wygeneruj nową migrację za pomocą
    Add-Migration
    (wygeneruje metodę tworzenia tabeli)
  • Migracja za pomocą
    Update-Database

Mam nadzieję że to pomoże!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jest na to inna opcja:
  • Ręcznie usuń tabele, które chcesz odtworzyć
  • Usuń rekordy z tabeli „__EFMigrationsHistory” powiązanej ze zdalnymi tabelami
  • Uruchom „update-database”

Powinien uruchomić wszystkie migracje, których nie ma ponownie w historii. Zachowaj ostrożność, jeśli masz migracje, które dotyczą więcej niż jednej tabeli. Może być konieczne pominięcie niektórych migracji i ręczne dodanie zmian.
Usunięcie DbSets z kontekstu powinno również działać i prawdopodobnie jest lepsze, ale dla mnie w Entity-Framework-Core w ogóle nie działało.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

  • Usuń folder migracji z załączoną zawartością.
  • Jak ręcznie upuszczać tabele
  • Uruchom polecenie update-database z konsoli Menedżera pakietów

Wszystko będzie działać tak, jak powinno
Miłego kodowania
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Brak zdefiniowanego przeze mnie automatyzacji. Ale nie z braku wysiłku.
Ale oto mój sukces:
W SQL Management Studio wygenerowałem skrypty dla całej bazy danych (lub tabel, o których wiesz, że są ze sobą powiązane). Znalazłem wszelkie ograniczenia klucza obcego (FK), indeksy itp. Związane z MyTable. Również sql generuje instrukcje wstawiania dla MyTable. Ograniczenia porzucania, upuszczanie tabeli, tworzenie tabeli (oczywiście z odpowiednią kolejnością pól), wstawianie danych, ponowne tworzenie ograniczeń FK.
Chciałem tylko sprawdzić bazę danych, próbowałem wprowadzić zmiany w bazie danych.
ADD-MIGRATION XYZ
UPDATE-DATABASE -VERBOSE

Wszystko działało.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się