Termin „scaffold-dbcontext” nie jest rozpoznawany jako nazwa polecenia cmdlet, funkcji, pliku skryptu lub programu operacyjnego

88

Podczas próby tworzenia szkieletu za pomocą asp.net core to polecenie

scaffold-dbcontext "Data Source = (local); Initial Catalog = MyDb; Integrated Security = True;" Microsoft.EntityFrameworkCore.sqlserver -outputdir Models

Daje ten błąd.

scaffold-dbcontext: Termin „scaffold-dbcontext” nie jest rozpoznawany jako nazwa polecenia cmdlet, funkcji, pliku skryptu ani programu operacyjnego. Sprawdź pisownię nazwy lub, jeśli ścieżka została dołączona, sprawdź, czy ścieżka jest poprawna i spróbuj ponownie. W linii: 1 char: 1 + scaffold-dbcontext "Data Source = (local); Initial Catalog = MyDB; In ... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (scaffold-dbcontext: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

Wypróbowałem tutaj rozwiązanie , ale u mnie nie działa.

Masz pojęcie, jaka może być przyczyna / lekarstwo?

simon831
źródło
Upewnij się, że entityframework.tools znajduje się w sekcji narzędzi projektu.json.
Tim Scriv

Odpowiedzi:

216

U mnie najwyraźniej zadziałało, gdy uruchomiłem również w konsoli Menedżera pakietów:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Upewnij się również:

  • Aby mieć odniesienia do innych zależności (na przykład Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) w zależności od potrzeb.

  • Aby wybrać odpowiedni zestaw jako cel dla twoich poleceń w prawym górnym rogu konsoli PM (często jestem oszukiwany, zapominając o tym ...)

Inny problem, który napotkałem: z dbcontext znajdującym się w oddzielnej bibliotece klas, napotkałem następujący błąd:

Nie można znaleźć zestawu dostawcy o nazwie Microsoft.EntityFrameworkCore.SqlServer. Upewnij się, że podana nazwa jest poprawna i odwołuje się do niej projekt.

Które udało mi się naprawić, ustawiając moją bibliotekę klas jako projekt startowy w VS (nie pytaj, dlaczego, ponieważ wydaje się to bez znaczenia, ale zadziałało).

Późna edycja, jest jeszcze coś, co trzeba wiedzieć: nie można uruchomić Scaffold-DbContext w odniesieniu do biblioteki klas, która jest ukierunkowana tylko na .Net Standard, należy również włączyć w niej aplikację netcoreapp, w przeciwnym razie Scaffold-DbContext będzie narzekać. Aby obsługiwać oba cele, edytuj csproj, aby wstawić: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Zamiast <TargetFramework>sekcji.

Po tym wszystkim będziesz mógł uruchomić Scaffold-DbContextwiersz poleceń z odpowiednimi argumentami i parametrami połączenia.

AFract
źródło
2
Dzięki za to. Twoje rozwiązanie nadal działa dla VS2019 przy użyciu .net core 2.2
PaulC
Szkoda, że ​​Microsoft nie poprawił tego w ciągu ostatnich miesięcy. Nie spodziewałem się, że moja odpowiedź będzie tak pomocna i tak długo, jak część z niej wydaje się być trudnym obejściem dla jakiegoś dziwnego zachowania IDE ...
AFract
Wystąpił błąd: nie można znaleźć zestawu dostawcy o nazwie Microsoft.EntityFrameworkCore.SqlServer. Upewnij się, że podana nazwa jest poprawna i odwołuje się do niej projekt. Musiałem też uruchomić: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan
@AhmedFaizan właściwie jest to jeden z przykładów pakietów wymienionych w poście. Cieszę się, że było to pomocne
AFract
1
Wymagane przez NET Core 3.1, ale nie przez oficjalną dokumentację mysql, musi być zainstalowane, aby najpierw utworzyć szkielet bazy danych mysql z mysql EF core. Oczywiście dzięki.
Leandro
16
  1. Upewnij się, że jest to dostępne w pliku project.json „Microsoft.EntityFrameworkCore.Tools.DotNet”: „1.0.0-preview3-final”.

wprowadź opis obrazu tutaj

  1. Uruchom polecenie w konsoli menedżera pakietów

wprowadź opis obrazu tutaj

to wszystko, co będzie działać

Devanathan.S
źródło
9
właściwie naprawiam to, instalując pakiet
nuget
@kepung - musiałem to zrobić po ostatniej aktualizacji VS2017. Dziwny. Dziękuję za komentarz, ponieważ rozwiązał problem.
KSwift87
10

Upewnij się, że uruchamiasz VS jako administrator i masz zainstalowane następujące pakiety:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools
Moji
źródło
1
W przypadku mojego podobnego problemu nie musiałem instalować Microsoft.EntityFrameworkCore.SqlServer.Design, a resztę zainstalowałem i działa poprawnie.
MinaMRM
@MinaMRM thanks. zadziałało!!
The Godfather
9

Miałem ten sam problem. W moim przypadku brakowało niektórych zależności, więc upewnij się, że masz następujące:

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Tools

wprowadź opis obrazu tutaj

Mam nadzieję, że to pomoże. :)

eldinT
źródło
Mam wszystkie 3 z nich, ale nadal otrzymuję błąd „Scafford-DbContext nie został rozpoznany”. Próbowałem dodać Microsoft.EntityFrameworkCore.SqlServer.Design, ale to nie pomogło.
Rod
1

Jeśli używasz .NetCore 2.2, poniższe polecenie działa jak urok dla mnie w wierszu polecenia lub w Git Bash. Przed uruchomieniem polecenia upewnij się, że jesteś bezpośrednio w folderze projektu.

Na przykład C: \ App \ ProjectName:

 dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model
Auguste
źródło
1

Zainstalowałem Microsoft.EntityFrameworkCore.Tools z NuGet Package Manager i było to widoczne w zainstalowanych pakietach. Ale ciągle otrzymywałem ten błąd.

Ponowne uruchomienie programu Visual Studio (2019 / wersja 16.4.4) naprawiło to za mnie.

joym8
źródło
1

Scaffoldpolecenie jest częścią dbcontextpolecenia w EF. Poniżej znajdują się szczegóły dotyczące sukcesu scaffold:

wprowadź opis obrazu tutaj

Wymagane referencje pakietu:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0"/>

Zatem nasze polecenie dotyczące rusztowania powinno wyglądać następująco:

dotnet ef dbcontext scaffold "Server=localhost\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o OutputDirectory

Twoja Serverwartość może się różnić w zależności od nazwy serwera Db. Zastąp MyDatabasenazwą bazy danych, taką jak masteri, OutputDirectorylokalizacją, w której chcesz, aby nowo utworzone klasy szkieletowe, takie jak Modelsfolder.

Prasad Kaiche
źródło
1

Upewnij się, że używasz właściwej konsoli, „Konsoli menedżera pakietów”. Jest też konsola „Terminal”, która wygląda bardzo podobnie, ale nie działa dla tego polecenia. Konsolę Menedżera pakietów można znaleźć w menu Widok -> Inne Windows (od Visual Studio 2019, wer.16.6.5)

FloverOwe
źródło
-1

Niedawno napotkałem inną przyczynę tego błędu: sam NuGet był nieaktualny.

Aktualizacja NuGet rozwiązała problem.

Jeśli odpowiedź Devanathana nie działa, sprawdź, czy sam pakiet NuGet jest aktualny.

Brian Swift
źródło
-2

Dla mnie ... podczas kopiowania i wklejania polecenia z Microsoft Docs, z jakiegoś powodu dodano dodatkowe odstępy wokół łączników.

Usunięcie myślników naprawiło to:

źle:

Scaffold - DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer - OutputDir Models

dobry:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Dokumentacja mówi również, że jeśli pojawi się ten błąd, spróbuj ponownie uruchomić program Visual Studio.

https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

Andrzej
źródło