Dwie najważniejsze wskazówki:
[1] - Upewnij się, że projekt jest całkowicie kompilowany, zanim uruchomisz nowe polecenie szkieletu.
Inaczej...
- Zaczniesz pisać linię kodu.
- Zrozumiesz, że w modelu brakuje wymaganej kolumny DB.
- Pójdziesz spróbować go zbudować.
- Dwadzieścia minut później zdasz sobie sprawę, że przyczyną niepowodzenia kompilacji (i polecenia tworzenia szkieletu) jest to, że masz dosłownie napisaną w połowie linię kodu. Ups!
[2] - Sprawdź w kontroli źródła lub zrób kopię:
- Pozwala łatwo zweryfikować, co się zmieniło.
- W razie potrzeby umożliwia wycofanie.
Jeśli masz pecha lub popełnisz błąd, możesz mieć bardzo irytujące problemy z jajkiem i kury.
Inne problemy:
Jeśli masz wiele bibliotek DLL, upewnij się, że nie generujesz do niewłaściwego projektu . Komunikat „Niepowodzenie kompilacji” może wystąpić z wielu powodów, ale najgłupszy byłby, gdybyś nie miał zainstalowanego EFCore w projekcie, w którym tworzysz rusztowanie.
W konsoli menedżera pakietów znajduje się Default project
lista rozwijana i prawdopodobnie tam trafiły Twoje nowe pliki, jeśli brakuje oczekiwanej zmiany.
Lepszym rozwiązaniem niż pamiętanie o ustawieniu listy rozwijanej jest dodanie -Project
przełącznika do polecenia dotyczącego rusztowania.
Oto pełne polecenie, którego używam:
W przypadku EF Core 2
Scaffold-DbContext -Connection "Server = (lokalny); Database = DefenderRRCart; Integrated Security = True; Trusted_Connection = True;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess -force
W przypadku EF Core 3
dotnet ef dbcontext scaffold "Server = tcp: XXXXX.database.windows.net, 1433; Initial Catalog = DATABASE_NAME; Persist Security Info = False; User ID = USERNAME; Password = PASSWORD; MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False ; Limit czasu połączenia = 30; " Microsoft.EntityFrameworkCore.SqlServer -o DB.Models --context-dir DB.Contexts --context RRDBContext --project RR.EF.csproj --force --use-database-names
Uwaga: -force nadpisze pliki, ale nie usunie tych, które już nie istnieją. Jeśli usuniesz tabele ze swojej bazy danych, musisz samodzielnie usunąć stare pliki encji (po prostu posortuj w Eksploratorze według daty i usuń stare).
Pełne odniesienie do rusztowania:
EF Core 2:
https://docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext (this
EF Core 3:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet