J'essaie de générer des classes à partir d'une base de données (première approche de la base de données EntityFramework).
Pour plus de commodité, je marche plus ou moins avec ce tutoriel: https://docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html
J'exécute l'équivalent de cette ligne de code dans la console de Visual Studio Package Manager:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose
Cette ligne de code génère l'erreur (avec le mode -Verbose activé):
Using startup project 'EFSandbox'.
Using project 'EntityFrameworkCore'
Build started...
Build failed.
Je ne vois aucune autre option produisant une sortie significative, et je ne vois aucune documentation sur cette erreur particulière. Si cela peut vous aider, ce projet n’a pas de fichier project.json pour le moment. Tout se trouve dans le fichier .csproj, que je n’ai pas modifié manuellement.
Tout d’abord, assurez-vous que votre projet est construit avant d’exécuter une nouvelle commande d’échafaudage.
Ce qui m’arrive souvent, c’est que je commence à écrire une ligne de code, à réaliser qu’une nouvelle colonne de base de données est nécessaire, à essayer de l’échafauder - puis, au bout de 20 minutes, à la raison pour laquelle ma commande de construction (et ma commande d’échafaudage) échoue. avoir une ligne de code à moitié écrite. Oops.
Si vous avez plusieurs DLL, vous générez peut-être dans le mauvais projet. Ensuite, "Build failed" (échec de la construction) se produit pour un certain nombre de raisons, probablement parce que EFCore n'est pas installé dans ce projet.
Dans la console du gestionnaire de paquets, il y a un Default project
et c'est probablement là que vos fichiers se sont retrouvés.
La solution est simple et il vous suffit d’ajouter le commutateur -Project
à vos options.
C'est la commande complète que j'utilise:
Scaffold-DbContext -Connection "Serveur = (local); Base de données = DefenderRRCart; Intégré Sécurité = True; Trusted_Connection = True;" -Fournisseur Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Models -context RRStoreContext -Project RR.DataAccess -force
Remarque: -force écrasera les fichiers mais ne supprimera pas ceux qui n'existent plus. Si vous supprimez des tables de votre base de données, vous devez supprimer vous-même les anciens fichiers d'entité (il suffit de trier dans Explorer par date et de supprimer les anciens).
Options complètes: https://docs.efproject.net/fr/latest/misc Miscellaneous/cli/powershell.html#scaffold-dbcontext
Construire manuellement le projet Ctrl + Maj + B m'a aidé à voir comment récupérer les erreurs qui causaient l'échec de la construction.
Je sais que c'est vieux, mais j'ai passé un moment à essayer de comprendre cela aujourd'hui, alors j'espère que cela aidera quelqu'un.
J'ai un projet .Net Core mais je souhaite scaffolder mes fichiers dans une bibliothèque de classes .Net Standard. DbContext-Scaffold
dans la console du gestionnaire de paquets ne fonctionnait pas pour moi, mais dotnet ef dbcontext scaffold
dans une commande ordinaire Invite, si.
Je devais installer ces paquets dans ma bibliothèque de classes:
Je devais avoir un projet .Net Core défini comme projet de démarrage dans ma solution et ce projet devait avoir une référence à ma bibliothèque de classes . Je pense que cette dernière partie est ce qui me manquait et m'a gardé à me gratter la tête pendant si longtemps.
Enfin, je suis entré dans la bibliothèque de classe à partir d'une invite de commande et j'ai lancé ceci:
dotnet ef dbcontext scaffold "<connection string>" Microsoft.EntityFrameworkCore.SqlServer -o <output folder> -s <relative path to my startup project>
Pour moi, le problème était que j'essayais de l'installer dans un nouveau projet de console vierge dans la solution, qui ne contenait aucun fichier. L'échafaudage a donc essayé d'utiliser ce projet en tant que projet de démarrage et n'a pas trouvé Main
. Je l'ai corrigé en ajoutant un nouveau fichier avec un fichier principal vide
Utilisation de VS2017 Preview 3, .NET Core 2 (PREVIEW) J'avais toutes sortes de problèmes, mais j'ai finalement adopté l'approche suggérée ci-dessus et créé une toute nouvelle solution.
<TargetFramework>netcoreapp2.0</TargetFramework>
Puis, ajouté le Entity Framework:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0-preview2-final" />
Ensuite;
Construisez une solution complète et voyez où elle échoue. Certains projets NuGet étaient cachés dans un dossier qui ne s’était pas construit. Seulement en reconstruisant la solution, j'ai découvert quel était le problème. Tout doit être construit sinon l'échafaudage échouera.
Je rencontrais toujours ce problème même lorsque je m'assurais que mon projet (sur lequel EF Core était installé) était construit correctement. Il a toujours échoué avec le "Build failed." message visible lors de l’utilisation de l’indicateur -Verbsose
.
Je devais le faire dans mon cas:
-Project
dans la commande de console du gestionnaire de packages pour pointer vers mon projet nouvellement créé (et fourni par EF Core). La dernière étape était juste pour faire bonne mesure, car il n’y avait qu’un seul projet dans ma solution jetable.Il semble que tout ce processus nécessite un projet principal ASP.NET (ou tout simplement un projet .NET Core qui n'est pas une bibliothèque de classes) quelque part dans la solution, probablement défini comme projet de démarrage de la solution.
Si entity-framework renvoie build failed
, vous avez probablement une erreur dans l'un de vos projets.
Même si le projet sur lequel vous exécutez la commande est propre et sans erreur, les autres projets de cette solution peuvent provoquer la réponse build failed
.
Solution
Default project
dans Package Manager Console
.Pour moi, mon projet était construit dans Visual Studio, mais je devais spécifier une version pour "Microsoft.AspNetCore.App" lors de l'exécution de Scaffold-DbContext.
Donc au lieu de:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeFrameworkVersion>2.1.6</RuntimeFrameworkVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App"/>
</ItemGroup>
Je devais avoir:
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.6" />
</ItemGroup>
Assurez-vous que votre projet ne fonctionne pas. Pour une raison quelconque, cette commande ne fonctionne pas lorsque mon API est exécutée en arrière-plan.