El término 'scaffold-dbcontext' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable

87

Al intentar andamios con asp.net core este comando

scaffold-dbcontext "Fuente de datos = (local); Catálogo inicial = MyDb; Seguridad integrada = Verdadero;" Microsoft.EntityFrameworkCore.sqlserver -outputdir Modelos

Da este error.

scaffold-dbcontext: el término 'scaffold-dbcontext' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa operable. Verifique la ortografía del nombre o, si se incluyó una ruta, verifique que la ruta sea correcta y vuelva a intentarlo. En la línea: 1 carácter: 1 + scaffold-dbcontext "Fuente de datos = (local); Catálogo inicial = MyDB; En ... + ~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (scaffold-dbcontext: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

He probado la solución aquí , pero no me funciona.

¿Alguna idea de cuál podría ser la causa / cura?

simon831
fuente
Asegúrese de que entityframework.tools esté en la sección de herramientas de su project.json.
Tim Scriv

Respuestas:

216

Para mí, aparentemente funcionó una vez que también me ejecuté en la consola del Administrador de paquetes:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

También asegúrese de:

  • Para tener otras dependencias (por ejemplo, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) referenciadas según sus necesidades.

  • Para seleccionar el ensamblaje correcto como objetivo para sus comandos en la esquina superior derecha de la consola PM (con frecuencia me engaño olvidándolo ...)

Otro problema que encontré: con el dbcontext ubicado en una biblioteca de clases separada, me encontré con el siguiente error:

No se puede encontrar el ensamblado del proveedor con el nombre Microsoft.EntityFrameworkCore.SqlServer. Asegúrese de que el nombre especificado sea correcto y que el proyecto haga referencia a él.

Lo cual pude solucionar configurando mi biblioteca de clases como proyecto de inicio en VS (no preguntes por qué, ya que parece no tener sentido, pero funcionó).

Edición tardía, hay algo más que saber: no puede ejecutar Scaffold-DbContext contra una biblioteca de clases que solo tenga como objetivo .Net Standard, también debe habilitar netcoreapp en ella, o Scaffold-DbContext se quejará. Para admitir ambos objetivos, edite el csproj para poner: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> En lugar de <TargetFramework>sección.

Después de todo esto, podrá ejecutar su Scaffold-DbContextlínea de comando con los argumentos adecuados y la cadena de conexión.

AFract
fuente
2
Gracias por esto. Su solución todavía funciona para VS2019 usando .net core 2.2
PaulC
Lástima que Microsoft no haya mejorado esto durante estos últimos meses. No esperaba que mi respuesta fuera tan útil y mientras alguna parte pareciera ser una solución complicada para un comportamiento extraño de IDE ...
AFract
Me encontré con el error: No se puede encontrar el ensamblaje del proveedor con el nombre Microsoft.EntityFrameworkCore.SqlServer. Asegúrese de que el nombre especificado sea correcto y que el proyecto haga referencia a él. También tuve que ejecutar: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan
@AhmedFaizan en realidad es uno de los ejemplos de paquetes mencionados en la publicación. Me alegro de que haya sido útil
AFract
1
Requerido por NET Core 3.1 pero no por la documentación oficial de mysql, esto debe instalarse para poder montar una base de datos mysql primero con mysql EF core. Gracias por supuesto.
Leandro
16
  1. Asegúrese de que esté disponible en su archivo project.json "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final".

ingrese la descripción de la imagen aquí

  1. Ejecute el comando en la consola del administrador de paquetes

ingrese la descripción de la imagen aquí

eso es todo lo que funcionará

Devanathan.S
fuente
9
en realidad, soluciono esto instalando el paquete nuget: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung
@kepung: tuve que hacer esto después de una actualización reciente de VS2017. Impar. Gracias por su comentario, ya que resolvió el problema para mí.
KSwift87
10

Asegúrese de ejecutar VS como administrador y de haber instalado los siguientes paquetes:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools
Moji
fuente
1
Para mi problema similar, no necesité instalar Microsoft.EntityFrameworkCore.SqlServer.Design e instalé el resto y funciona correctamente.
MinaMRM
@MinaMRM gracias. ¡¡funcionó!!
El padrino
8

Tuvo el mismo problema. En mi caso, me faltaban algunas dependencias, así que asegúrese de tener la siguiente:

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

ingrese la descripción de la imagen aquí

Espero que esto ayude. :)

Anciano
fuente
Tengo los 3, pero sigo recibiendo el error "No se reconoce Scafford-DbContext". Intenté agregar Microsoft.EntityFrameworkCore.SqlServer.Design, pero eso no ayudó.
Rod
1

Si está utilizando .NetCore 2.2, el siguiente comando funciona como un encanto para mí en el símbolo del sistema o en Git Bash. Asegúrese de estar directamente en la carpeta del proyecto antes de ejecutar el comando.

Por ejemplo C: \ App \ ProjectName:

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

Había instalado Microsoft.EntityFrameworkCore.Tools desde NuGet Package Manager y estaba visible en los paquetes instalados. Pero seguí recibiendo este error.

Al reiniciar Visual Studio (2019 / Versión 16.4.4) me lo arregló.

joym8
fuente
1

ScaffoldEl comando es parte del dbcontextcomando en EF. A continuación se muestran los detalles para el éxito scaffold:

ingrese la descripción de la imagen aquí

Se requieren referencias de paquetes:

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

Entonces, nuestro comando de andamio debería verse así:

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

Su Servervalor puede diferir según el nombre de su servidor Db. Reemplace MyDatabasecon el nombre de su base de datos como mastery OutputDirectoryen la ubicación donde desea que sus clases con scaffold recién creadas como Modelscarpeta.

Prasad Kaiche
fuente
1

Asegúrese de que está utilizando la consola correcta, la "Consola del administrador de paquetes". También hay una consola "Terminal" que se ve muy similar, pero no funciona para este comando. La consola del administrador de paquetes se puede encontrar en Ver -> Otras ventanas (a partir de Visual Studio 2019, ver. 16.6.5)

FloverOwe
fuente
-1

Me encontré con otra causa de este error recientemente: NuGet estaba desactualizado.

La actualización de NuGet resolvió el problema.

Si la respuesta de Devanathan no funciona para usted, verifique que NuGet esté actualizado.

Brian Swift
fuente
-2

Para mí ... al copiar y pegar el comando de los documentos de microsoft, por alguna razón se agregó un espacio adicional alrededor de los guiones.

Eliminar los guiones lo solucionó:

incorrecto:

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

bueno:

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

Los documentos también dicen que si recibe este error, intente reiniciar Visual Studio.

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

Andrés
fuente