Der Begriff "scaffold-dbcontext" wird nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines bedienbaren Programms erkannt

88

Wenn Sie versuchen, mit asp.net Core ein Gerüst zu erstellen, verwenden Sie diesen Befehl

scaffold-dbcontext "Datenquelle = (lokal); Anfangskatalog = MyDb; Integrierte Sicherheit = True;" Microsoft.EntityFrameworkCore.sqlserver -outputdir-Modelle

Gibt diesen Fehler.

scaffold-dbcontext: Der Begriff 'scaffold-dbcontext' wird nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines bedienbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens. Wenn ein Pfad enthalten war, überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut. In Zeile: 1 Zeichen: 1 + scaffold-dbcontext "Datenquelle = (lokal); Anfangskatalog = MyDB; In ... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (scaffold-dbcontext: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

Ich habe hier die Lösung ausprobiert , aber sie funktioniert bei mir nicht.

Irgendeine Idee, was die Ursache / Heilung sein könnte?

simon831
quelle
Stellen Sie sicher, dass sich entityframework.tools im Abschnitt tools Ihrer project.json befindet.
Tim Scriv

Antworten:

216

Bei mir hat es anscheinend funktioniert, nachdem ich auch in der Package Manager-Konsole ausgeführt habe:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Stellen Sie außerdem sicher:

  • Andere Abhängigkeiten (z. B. Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) werden je nach Ihren Anforderungen referenziert.

  • So wählen Sie die richtige Baugruppe als Ziel für Ihre Befehle in der oberen rechten Ecke der PM-Konsole aus (ich werde häufig getäuscht, wenn ich sie vergesse ...)

Ein weiteres Problem, auf das ich gestoßen bin: Mit dem Datenbankkontext in einer separaten Klassenbibliothek ist der folgende Fehler aufgetreten:

Provider-Assembly mit dem Namen Microsoft.EntityFrameworkCore.SqlServer konnte nicht gefunden werden. Stellen Sie sicher, dass der angegebene Name korrekt ist und vom Projekt referenziert wird.

Was ich beheben konnte, indem ich meine Klassenbibliothek als Startprojekt in VS festlegte (fragen Sie nicht warum, da es bedeutungslos erscheint, aber es hat funktioniert).

Bei der späten Bearbeitung gibt es noch etwas zu wissen: Sie können Scaffold-DbContext nicht nur für eine Klassenbibliothek ausführen. Net Standard, Sie müssen auch netcoreapp darin aktivieren, sonst beschwert sich Scaffold-DbContext. Um beide Ziele zu unterstützen, bearbeiten Sie das zu setzende csproj: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Anstelle von<TargetFramework> Abschnitts.

Nach alledem können Sie Ihre Scaffold-DbContextBefehlszeile mit den richtigen Argumenten und der Verbindungszeichenfolge ausführen .

AFract
quelle
2
Danke dafür. Ihre Lösung funktioniert immer noch für VS2019 mit .net Core 2.2
PaulC
Schade, dass Microsoft dies in den letzten Monaten nicht verbessert hat. Ich hatte nicht erwartet, dass meine Antwort so hilfreich sein würde, und solange ein Teil davon eine schwierige Problemumgehung für ein seltsames IDE-Verhalten darstellt ...
AFract
Ich bin auf den Fehler gestoßen: Provider-Assembly mit dem Namen Microsoft.EntityFrameworkCore.SqlServer konnte nicht gefunden werden. Stellen Sie sicher, dass der angegebene Name korrekt ist und vom Projekt referenziert wird. Ich musste auch ausführen: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan
@AhmedFaizan eigentlich ist es eines der Beispiele für Pakete, die in der Post erwähnt werden.
Ich bin
1
Erforderlich für NET Core 3.1, jedoch nicht für die offizielle Dokumentation zu MySQL, muss diese installiert werden, um zuerst eine MySQL-Datenbank mit MySQL-EF-Core zu erstellen. Danke natürlich.
Leandro
16
  1. Stellen Sie sicher, dass dies in Ihrer project.json-Datei "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-Preview3-Final" verfügbar ist.

Geben Sie hier die Bildbeschreibung ein

  1. Führen Sie den Befehl in der Paketmanagerkonsole aus

Geben Sie hier die Bildbeschreibung ein

das ist alles was es funktionieren wird

Devanathan.S
quelle
9
Eigentlich behebe ich das, indem ich das Nuget-Paket installiere: Install-Package Microsoft.EntityFrameworkCore.Tools
Kepung
@kepung - Ich musste dies nach einem kürzlich durchgeführten VS2017-Update tun. Seltsam. Vielen Dank für Ihren Kommentar, der das Problem für mich gelöst hat.
KSwift87
10

Stellen Sie sicher, dass Sie VS als Administrator ausführen und die folgenden Pakete installiert haben:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools
Moji
quelle
1
Für mein ähnliches Problem musste ich Microsoft.EntityFrameworkCore.SqlServer.Design nicht installieren, und ich habe den Rest installiert und es läuft korrekt.
MinaMRM
@MinaMRM danke. es funktionierte!!
Der Pate
9

Hatte das gleiche Problem. In meinem Fall fehlten mir einige Abhängigkeiten, stellen Sie also sicher, dass Sie die folgenden haben:

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

Geben Sie hier die Bildbeschreibung ein

Hoffe das würde helfen. :) :)

eldinT
quelle
Ich habe alle drei, aber ich erhalte immer noch den Fehler "Scafford-DbContext wird nicht erkannt". Ich habe versucht, Microsoft.EntityFrameworkCore.SqlServer.Design hinzuzufügen, aber das hat nicht geholfen.
Rod
1

Wenn Sie .NetCore 2.2 verwenden, funktioniert der folgende Befehl für mich entweder an der Eingabeaufforderung oder an Git Bash wie ein Zauber. Stellen Sie sicher, dass Sie sich direkt im Projektordner befinden, bevor Sie den Befehl ausführen.

Zum Beispiel C: \ App \ ProjectName:

 dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model
Auguste
quelle
1

Ich hatte Microsoft.EntityFrameworkCore.Tools von NuGet Package Manager installiert und es war in den installierten Paketen sichtbar. Aber ich habe diesen Fehler immer wieder bekommen.

Durch einen Neustart von Visual Studio (2019 / Version 16.4.4) wurde das Problem für mich behoben.

joym8
quelle
1

ScaffoldBefehl ist Teil des dbcontextBefehls in EF. Nachfolgend finden Sie die Details für den Erfolg scaffold:

Geben Sie hier die Bildbeschreibung ein

Paketreferenzen erforderlich:

<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"/>

Unser Gerüstbefehl sollte also so aussehen:

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

Ihr ServerWert kann je nach Db-Servernamen abweichen. Ersetzen Sie MyDatabasedurch Ihren Datenbanknamen wie masterund OutputDirectoryan den Ort, an dem Sie Ihre neu erstellten Gerüstklassen wie ModelsOrdner möchten .

Prasad Kaiche
quelle
1

Stellen Sie sicher, dass Sie die richtige Konsole verwenden, die "Package Manager-Konsole". Es gibt auch eine "Terminal" -Konsole, die sehr ähnlich aussieht, aber für diesen Befehl nicht funktioniert. Die Package Manager-Konsole finden Sie unter Ansicht -> Andere Fenster (ab Visual Studio 2019, Version 16.6.5).

FloverOwe
quelle
-1

Ich bin kürzlich auf eine andere Ursache für diesen Fehler gestoßen: NuGet selbst war veraltet.

Durch das Aktualisieren von NuGet wurde das Problem behoben.

Wenn die Antwort von Devanathan bei Ihnen nicht funktioniert, überprüfen Sie, ob NuGet selbst auf dem neuesten Stand ist.

Brian Swift
quelle
-2

Für mich ... beim Kopieren und Einfügen des Befehls aus den Microsoft-Dokumenten wurde aus irgendeinem Grund ein zusätzlicher Abstand um die Bindestriche hinzugefügt.

Durch Entfernen der Bindestriche wurde Folgendes behoben:

falsch:

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

gut:

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

In den Dokumenten heißt es außerdem, wenn Sie diesen Fehler erhalten, versuchen Sie, Visual Studio neu zu starten.

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

Andrew
quelle