Il termine "scaffold-dbcontext" non è riconosciuto come nome di un cmdlet, una funzione, un file di script o un programma eseguibile


93

Quando si tenta di eseguire lo scaffolding con asp.net core questo comando

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

Fornisce questo errore.

scaffold-dbcontext: il termine "scaffold-dbcontext" non è riconosciuto come nome di un cmdlet, una funzione, un file di script o un programma eseguibile. Controlla l'ortografia del nome o, se è stato incluso un percorso, verifica che il percorso sia corretto e riprova. In linea: 1 carattere: 1

+ scaffold-dbcontext "Data Source=(local);Initial Catalog=MyDB;In ...
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (scaffold-dbcontext:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Ho provato la soluzione qui , ma non funziona per me.

Qualche idea su quale potrebbe essere la causa / cura?


Assicurati che entityframework.tools sia nella sezione tools del tuo project.json.
Tim Scriv

Risposte:


230

Per me apparentemente ha funzionato una volta che ho eseguito anche nella console di Gestione pacchetti:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Assicurati anche che:

  • Per avere altre dipendenze (ad esempio Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) referenziate a seconda delle tue esigenze.

  • Per selezionare l'assieme giusto come destinazione per i tuoi comandi nell'angolo in alto a destra della console PM (sono spesso ingannato dimenticandolo ...)

Un altro problema che ho riscontrato: con il dbcontext situato in una libreria di classi separata, ho riscontrato il seguente errore:

Impossibile trovare l'assembly del provider con il nome Microsoft.EntityFrameworkCore.SqlServer. Verificare che il nome specificato sia corretto e a cui fa riferimento il progetto.

Che sono stato in grado di risolvere impostando la mia libreria di classi come progetto di avvio in VS (non chiedere perché sembra senza significato, ma ha funzionato).

Modifica tardiva, c'è qualcos'altro da sapere: non puoi eseguire Scaffold-DbContext su una libreria di classi che si rivolge solo a .Net Standard, devi anche abilitare netcoreapp in esso, altrimenti Scaffold-DbContext si lamenterà. Per supportare entrambi i target, modifica il csproj in: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Invece di<TargetFramework> sezione.

Dopo tutto questo sarai in grado di eseguire la Scaffold-DbContextriga di comando con gli argomenti e la stringa di connessione corretti.


2
Grazie per questo. La tua soluzione funziona ancora per VS2019 utilizzando .net core 2.2
PaulC

Peccato che Microsoft non abbia migliorato questo aspetto negli ultimi mesi. Non mi aspettavo che la mia risposta fosse così utile e fintanto che una parte di essa sembra essere una soluzione alternativa complicata per qualche strano comportamento IDE ...
AFract

Mi sono imbattuto nell'errore: Impossibile trovare l'assembly del provider con il nome Microsoft.EntityFrameworkCore.SqlServer. Verificare che il nome specificato sia corretto e a cui fa riferimento il progetto. Ho anche dovuto eseguire: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan

@AhmedFaizan in realtà è uno degli esempi di pacchetti menzionati nel post. Sono contento che sia stato utile
AFract

1
Richiesto da NET Core 3.1 ma non dalla documentazione ufficiale di mysql, deve essere installato per impalcare un database mysql prima con mysql EF core. Grazie naturalmente.
Leandro

17
  1. Assicurati che sia disponibile nel file project.json "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final".

inserisci qui la descrizione dell'immagine

  1. Esegui il comando nella console del gestore pacchetti

inserisci qui la descrizione dell'immagine

questo è tutto ciò che funzionerà


9
in realtà lo risolvo installando il pacchetto nuget: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung

@kepung - Ho dovuto farlo dopo un recente aggiornamento di VS2017. Dispari. Grazie per il tuo commento in quanto ha risolto il problema per me.
KSwift87

12

Assicurati di eseguire VS come amministratore e di aver installato i seguenti pacchetti:

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

1
Per il mio problema simile, non ho bisogno di installare Microsoft.EntityFrameworkCore.SqlServer.Design e ho installato il resto e funziona correttamente.
MinaMRM

12

Ho avuto lo stesso problema. Nel mio caso mancavano alcune dipendenze, quindi assicurati di avere la seguente:

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

inserisci qui la descrizione dell'immagine

Spero che questo possa aiutare. :)


Ho tutti e 3 quelli, ma continuo a ricevere l'errore "Scafford-DbContext non è riconosciuto". Ho provato ad aggiungere Microsoft.EntityFrameworkCore.SqlServer.Design, ma ciò non ha aiutato.
Rod

3

Scaffoldcomando fa parte del dbcontextcomando in EF. Di seguito sono riportati i dettagli per il successo scaffold:

inserisci qui la descrizione dell'immagine

Riferimenti del pacchetto richiesti:

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

Quindi il nostro comando scaffold dovrebbe essere simile a:

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

Il Servervalore potrebbe differire in base al nome del server Db. Sostituisci MyDatabasecon il nome del tuo database come mastere OutputDirectorynella posizione in cui desideri le classi con scaffolding appena create come la Modelscartella.


2

Avevo installato Microsoft.EntityFrameworkCore.Tools da NuGet Package Manager ed era visibile nei pacchetti installati. Ma ho continuato a ricevere questo errore.

Il riavvio di Visual Studio (2019 / versione 16.4.4) lo ha risolto per me.


1

Se stai usando .NetCore 2.2, il comando seguente funziona come un fascino per me sul prompt dei comandi o su Git Bash. Assicurati di essere direttamente nella cartella del progetto prima di eseguire il comando.

Ad esempio C: \ App \ ProjectName:

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

1

Assicurati di utilizzare la console giusta, la "Console di Gestione pacchetti". C'è anche una console "Terminal" che sembra molto simile, ma non funziona per questo comando. La console di Gestione pacchetti si trova in Visualizza -> Altre finestre (a partire da Visual Studio 2019, ver. 16.6.5)


-1

Di recente mi sono imbattuto in un'altra causa di questo errore: NuGet stesso non era aggiornato.

L'aggiornamento di NuGet ha risolto il problema.

Se la risposta di Devanathan non funziona per te, assicurati che NuGet stesso sia aggiornato.


-2

Per me ... quando si copia e incolla il comando da microsoft docs, per qualche motivo è stata aggiunta una spaziatura extra attorno ai trattini.

La rimozione dei trattini ha risolto il problema:

sbagliato:

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

bene:

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

I documenti dicono anche che se ricevi questo errore, prova a riavviare Visual Studio.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.