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?
la source
Réponses:
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:
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-DbContext
ligne de commande avec les arguments et la chaîne de connexion appropriés.la source
c'est tout cela fonctionnera
la source
Assurez-vous d'exécuter VS en tant qu'administrateur et d'avoir installé les packages suivants:
la source
Avait le même problème. Dans mon cas, il me manquait certaines dépendances, alors assurez-vous que vous avez la suivante:
J'espère que cela aiderait. :)
la source
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
la source
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.
la source
Scaffold
La commande fait partie de ladbcontext
commande dans EF. Voici les détails pour réussirscaffold
: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
Server
valeur peut différer selon le nom de votre serveur Db. RemplacezMyDatabase
par le nom de votre base de données commemaster
etOutputDirectory
à l'emplacement où vous voulez vos classes échafaudées nouvellement créées commeModels
dossier.la source
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)
la source
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.
la source
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
la source