Ich versuche, Klassen aus einer Datenbank zu generieren (erster Ansatz von EntityFrameworks Datenbank).
Der Einfachheit halber gehe ich mehr oder weniger mit diesem Tutorial mit: https://docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html
Ich bin an einem Punkt angelangt, an dem ich das Äquivalent dieser Codezeile in der Visual Studio Package Manager-Konsole ausführe:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose
Diese Codezeile generiert den Fehler (bei aktiviertem -Verbose-Modus):
Using startup project 'EFSandbox'.
Using project 'EntityFrameworkCore'
Build started...
Build failed.
Ich sehe keine anderen Optionen, die eine aussagekräftige Ausgabe erzeugen, und ich sehe keine Dokumentation zu diesem bestimmten Fehler. Wenn es überhaupt hilft, verfügt dieses Projekt derzeit nicht über eine Datei project.json. Alles ist in der .csproj-Datei, die ich nicht manuell bearbeitet habe.
quelle
Antworten:
Zwei wichtige Tipps:
[1] - Stellen Sie sicher, dass Ihr Projekt vollständig erstellt wurde, bevor Sie einen neuen Gerüstbefehl ausführen.
Andernfalls...
[2] - In die Quellcodeverwaltung einchecken oder eine Kopie erstellen:
Sie können einige sehr ärgerliche Probleme mit Hühnchen und Eiern bekommen, wenn Sie Pech haben oder einen Fehler machen.
Andere Probleme:
Wenn Sie mehrere DLLs haben, stellen Sie sicher, dass Sie nicht in das falsche Projekt generieren . Die Meldung "Build fehlgeschlagen" kann aus vielen Gründen auftreten. Am dümmsten ist es jedoch, wenn Sie EFCore nicht in dem Projekt installiert haben, in dem Sie sich befinden.
In der Paketmanagerkonsole gibt es ein
Default project
Dropdown-Menü, in dem wahrscheinlich Ihre neuen Dateien landen, wenn Sie eine erwartete Änderung verpassen.Eine bessere Lösung, als daran zu denken, ein Dropdown-Menü festzulegen, besteht darin, den
-Project
Schalter zu Ihrem Gerüstbefehl hinzuzufügen .Dies ist der vollständige Befehl, den ich verwende:
Für EF Core 2
Für EF Core 3
Hinweis: -force überschreibt Dateien, entfernt jedoch keine nicht mehr vorhandenen. Wenn Sie Tabellen aus Ihrer Datenbank löschen, müssen Sie die alten Entitätsdateien selbst löschen (sortieren Sie im Explorer einfach nach Datum und löschen Sie die alten).
Vollständige Gerüstreferenz:
EF Core 2:
https://docs.efproject.net/de/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext (this
EF Core 3:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
quelle
Ich weiß, dass dies alt ist, aber ich habe eine Weile versucht, dies heute herauszufinden, also hoffe ich, dass dies jemandem hilft.
Ich habe ein .Net Core-Projekt, möchte aber meine Dateien in eine .Net Standard-Klassenbibliothek einbinden.
DbContext-Scaffold
in der Paketmanager-Konsole hat bei mir nicht funktioniert, aberdotnet ef dbcontext scaffold
in einer regulären Eingabeaufforderung.Ich musste diese Pakete in meiner Klassenbibliothek installieren:
Ich musste ein .Net Core-Projekt als Startprojekt in meiner Lösung festlegen und dieses Projekt musste einen Verweis auf meine Klassenbibliothek haben . Ich denke, dieser letzte Teil hat mir gefehlt und mich so lange am Kopf gekratzt.
Schließlich habe ich über eine Eingabeaufforderung in die Klassenbibliothek aufgenommen und Folgendes ausgeführt:
dotnet ef dbcontext scaffold "<connection string>" Microsoft.EntityFrameworkCore.SqlServer -o <output folder> -s <relative path to my startup project>
quelle
Durch manuelles Erstellen des Projekts durch Drücken von Strg + Umschalt + B konnte ich die Fehler erkennen, die dazu führten, dass der Build fehlschlug.
quelle
Stellen Sie sicher, dass Ihr Projekt nicht ausgeführt wird. Aus irgendeinem Grund funktioniert dieser Befehl nicht, während meine API im Hintergrund ausgeführt wird.
quelle
Ich hatte dieses Problem immer noch, auch wenn ich sicherstellte, dass mein Projekt (auf dem EF Core installiert war) korrekt erstellt wurde. Es schlug immer noch mit "Build fehlgeschlagen" fehl. Nachricht, die bei Verwendung des
-Verbsose
Flags sichtbar ist .Ich musste dies in meinem Fall tun:
-Project
in den Befehl zur Paketmanager-Konsole, um auf mein neu erstelltes (und von EF Core bereitgestelltes) Projekt zu verweisen. Der letzte Schritt war nur aus gutem Grund, da meine Wegwerflösung nur ein Projekt enthielt.Es scheint, dass dieser gesamte Prozess ein ASP.NET-Kernprojekt (oder nur ein .NET-Kernprojekt, das keine Klassenbibliothek ist) irgendwo in der Lösung erfordert, vermutlich auch als Lösungsstartprojekt festgelegt.
quelle
Mit VS2017 Preview 3, .NET Core 2 (VORSCHAU) hatte ich alle möglichen Probleme, aber schließlich habe ich den oben vorgeschlagenen Ansatz gewählt und eine brandneue Lösung erstellt.
<TargetFramework>netcoreapp2.0</TargetFramework>
Dann wurde das Entity Framework hinzugefügt:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0-preview2-final" />
Dann;
quelle
Erstellen Sie eine Komplettlösung und sehen Sie, wo sie fehlschlägt. Ich hatte einige NuGet-Projekte in einem Ordner versteckt, der nicht erstellt wurde. Erst beim Wiederaufbau der Lösung fand ich heraus, wo das Problem lag. Alles muss gebaut werden, sonst fällt das Gerüst aus.
quelle
Für mich bestand das Problem darin, dass ich versuchte, es in einem neuen leeren Konsolenprojekt innerhalb der Lösung einzurichten, das keine Dateien enthielt. Daher versuchte das Gerüst, dieses Projekt als Startprojekt zu verwenden und konnte es nicht finden
Main
. Ich habe es behoben, indem ich eine neue Datei mit einer leeren Hauptdatei hinzugefügt habequelle
Dank des oben Gesagten wurde dies durch die Neuerstellung der Projektlösung gelöst. Einige wichtige Vorbehalte für mich persönlich waren:
dotnet build
war nicht genug (ich hatte angenommen, dass es das war)!dotnet build
Befehl in einem untergeordneten Projekt (myProject.data) auszuführen.Ich hoffe das hilft jemand anderem, der genauso verwirrt war!
quelle
Wenn Sie mehrere Projekte in der Lösung verwenden, überprüfen Sie das Standardprojekt im Paketmanager.
quelle
Ich löste es mit einem Rechtsklick auf Projekte und "Projekt entladen" ließ nur das EF-Projekt und führte die Befehle aus
quelle
Wenn das Entity-Framework zurückkehrt
build failed
, liegt höchstwahrscheinlich ein Fehler in einem Ihrer Projekte vor.Selbst wenn das Projekt, für das Sie den Befehl ausführen, sauber und fehlerfrei ist, können andere Projekte in dieser Lösung die
build failed
Antwort verursachen.Lösung
Default project
Dropdown-Liste ausgewählt istPackage Manager Console
quelle
Mein Projekt wurde in Visual Studio erstellt, aber ich musste beim Ausführen von Scaffold-DbContext eine Version für "Microsoft.AspNetCore.App" angeben.
Also statt:
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <RuntimeFrameworkVersion>2.1.6</RuntimeFrameworkVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App"/> </ItemGroup>
Ich musste haben:
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.6" /> </ItemGroup>
quelle
Stellen Sie sicher, dass Ihr Build einwandfrei funktioniert.
Führen Sie den Gerüstbefehl über die Paketkonsole aus. Ihr Befehl sollte funktionieren:
Scaffold-DbContext 'Data Source=TEST-XY010;Initial Catalog=TESTDB;Trusted_Connection=True' Microsoft.EntityFrameworkCore.SqlServer -Context HOPWAContext -OutputDir TESTModel -Force
quelle
Ich habe es behoben, indem ich meinen Server gestoppt und dann erneut ausgeführt habe.
quelle
Das hat heute bei mir aufgehört zu arbeiten. Also habe ich versucht, den Befehl dotnet scaffold über die Befehlszeile auszuführen, und es hat beim ersten Mal funktioniert. Frag mich nicht !!
quelle
Stellen Sie sicher, dass Sie alle Pakete haben, und drücken Sie Strg + Umschalt + b, um die Lösung zu erstellen. Es funktioniert bei mir.
quelle
Das hat bei mir funktioniert.
quelle