Le terme «scaffold-dbcontext» n'est pas reconnu comme le nom d'une applet de commande, d'une fonction, d'un fichier de script ou d'un programme utilisable

88

Lorsque vous essayez d'échafauder avec asp.net core, cette commande

scaffold-dbcontext "Source de données = (local); Catalogue initial = MaDb; Sécurité intégrée = True;" Modèles Microsoft.EntityFrameworkCore.sqlserver -outputdir

Donne cette erreur.

scaffold-dbcontext: le terme «scaffold-dbcontext» n'est pas reconnu comme le nom d'une applet de commande, d'une fonction, d'un fichier de script ou d'un programme utilisable. Vérifiez l'orthographe du nom ou, si un chemin a été inclus, vérifiez que le chemin est correct et réessayez. À la ligne: 1 char: 1 + scaffold-dbcontext "Data Source = (local); Initial Catalog = MyDB; In ... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (scaffold-dbcontext: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

J'ai essayé la solution ici , mais cela ne fonctionne pas pour moi.

Une idée de la cause / du remède?

simon831
la source
Assurez-vous que entityframework.tools se trouve dans la section outils de votre project.json.
Tim Scriv le

Réponses:

216

Pour moi, apparemment, cela a fonctionné une fois que j'ai également exécuté dans la console Package Manager:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Assurez-vous également:

  • Pour faire référencer d'autres dépendances (par exemple Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) en fonction de vos besoins.

  • Pour sélectionner le bon assemblage comme cible pour vos commandes dans le coin supérieur droit de la console PM (je suis souvent dupe en l'oubliant ...)

Un autre problème que j'ai rencontré: avec le dbcontext situé dans une bibliothèque de classes distincte, je rencontrais l'erreur suivante:

Impossible de trouver l'assembly de fournisseur avec le nom Microsoft.EntityFrameworkCore.SqlServer. Assurez-vous que le nom spécifié est correct et référencé par le projet.

Ce que j'ai pu résoudre en définissant ma bibliothèque de classes comme projet de démarrage dans VS (ne demandez pas pourquoi car cela semble dénué de sens, mais cela a fonctionné).

Modification tardive, il y a autre chose à savoir: vous ne pouvez pas exécuter Scaffold-DbContext contre une bibliothèque de classes ciblant uniquement .Net Standard, vous devez également activer netcoreapp dedans, sinon Scaffold-DbContext se plaindra. Pour prendre en charge les deux cibles, modifiez le csproj pour mettre: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Au lieu de la <TargetFramework>section.

Après tout cela, vous pourrez exécuter votre Scaffold-DbContextligne de commande avec les arguments et la chaîne de connexion appropriés.

AFract
la source
2
Merci pour cela. Votre solution fonctionne toujours pour VS2019 en utilisant .net core 2.2
PaulC
Dommage que Microsoft n'ait pas amélioré cela ces derniers mois. Je ne m'y attendais pas ma réponse soit aussi utile et aussi longtemps que une partie de celui - ci semble être une solution de contournement difficile pour un comportement IDE bizarre ...
AFract
J'ai rencontré l'erreur: impossible de trouver l'assemblage du fournisseur avec le nom Microsoft.EntityFrameworkCore.SqlServer. Assurez-vous que le nom spécifié est correct et référencé par le projet. J'ai également dû exécuter: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan
@AhmedFaizan en fait c'est l'un des exemples de paquets mentionnés dans l'article. Heureux d'avoir été utile
AFract
1
Requis par NET Core 3.1 mais pas par la documentation officielle de mysql, cela doit être installé afin de créer d'abord une base de données mysql avec mysql EF core. Merci bien sûr.
Leandro
16
  1. Assurez-vous que cela est disponible dans votre fichier project.json "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final".

entrez la description de l'image ici

  1. Exécutez la commande dans la console du gestionnaire de packages

entrez la description de l'image ici

c'est tout cela fonctionnera

Devanathan.S
la source
9
en fait, je corrige cela en installant le package nuget: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung
@kepung - J'ai dû le faire après une récente mise à jour VS2017. Impair. Merci pour votre commentaire car il a résolu le problème pour moi.
KSwift87
10

Assurez-vous d'exécuter VS en tant qu'administrateur et d'avoir installé les packages suivants:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools
Moji
la source
1
Pour mon problème similaire, je n'avais pas besoin d'installer Microsoft.EntityFrameworkCore.SqlServer.Design et j'ai installé le reste et il fonctionne correctement.
MinaMRM
@MinaMRM merci. ça a marché!!
Le Parrain
9

Avait le même problème. Dans mon cas, il me manquait certaines dépendances, alors assurez-vous que vous avez la suivante:

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

entrez la description de l'image ici

J'espère que cela aiderait. :)

eldinT
la source
J'ai tous les 3, mais j'obtiens toujours l'erreur "Scafford-DbContext n'est pas reconnu". J'ai essayé d'ajouter Microsoft.EntityFrameworkCore.SqlServer.Design, mais cela n'a pas aidé.
Rod
1

Si vous utilisez .NetCore 2.2, la commande ci-dessous fonctionne comme un charme pour moi sur l'invite de commande ou Git Bash. Assurez-vous que vous êtes directement sur le dossier du projet avant d'exécuter la commande.

Par exemple C: \ App \ ProjectName:

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

J'avais installé Microsoft.EntityFrameworkCore.Tools depuis NuGet Package Manager et il était visible dans les packages installés. Mais j'ai continué à recevoir cette erreur.

Le redémarrage de Visual Studio (2019 / Version 16.4.4) l'a corrigé pour moi.

joym8
la source
1

ScaffoldLa commande fait partie de la dbcontextcommande dans EF. Voici les détails pour réussir scaffold:

entrez la description de l'image ici

Références de package requises:

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

Donc, notre commande d'échafaudage devrait ressembler à:

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

Votre Servervaleur peut différer selon le nom de votre serveur Db. Remplacez MyDatabasepar le nom de votre base de données comme masteret OutputDirectoryà l'emplacement où vous voulez vos classes échafaudées nouvellement créées comme Modelsdossier.

Prasad Kaiche
la source
1

Assurez-vous que vous utilisez la bonne console, la «Console du gestionnaire de packages». Il existe également une console "Terminal" qui ressemble beaucoup, mais qui ne fonctionne pas pour cette commande. La console du gestionnaire de package se trouve dans Affichage -> Autres fenêtres (à partir de Visual Studio 2019, ver. 16.6.5)

FloverOwe
la source
-1

J'ai récemment rencontré une autre cause de cette erreur: NuGet lui-même était obsolète.

La mise à jour de NuGet a résolu le problème.

Si la réponse de Devanathan ne fonctionne pas pour vous, assurez-vous que NuGet lui-même est à jour.

Brian Swift
la source
-2

Pour moi ... lors du copier-coller de la commande à partir des documents Microsoft, pour une raison quelconque, un espacement supplémentaire a été ajouté autour des tirets.

La suppression des traits d'union l'a corrigé:

faux:

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

bien:

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

La documentation indique également que si vous recevez cette erreur, essayez de redémarrer Visual Studio.

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

Andrew
la source