Wie generieren Sie mit Entity Framework Core das EF-Modell und die Entitäten?
Laut ASP.NET Core - Vorhandene Datenbank von Microsoft müssen Sie einen Befehl wie diesen in der Package Manager Console ausführen:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Dadurch haben Sie keine Kontrolle darüber, welche Tabellen oder Ansichten importiert werden sollen. Ist es möglich, dass dies die einzige Möglichkeit ist, die Datenbank umzuentwickeln und EF-Modelle und Entitäten jetzt mit EF Core zu erstellen, und wie ist dieser Fortschritt im Vergleich zu der Art, wie dies seit Jahren mit dem vollständigen Entity Framework getan wurde?
In Entity Framework Core ist dies nicht möglich. Lesen Sie die Dokumentation hier: https://docs.Microsoft.com/en-us/ef/efcore-and-ef6/features
Ich weiß, dass diese Frage ein bisschen alt ist, aber ich denke, es ist sehr nützlich für Leute, die über das gleiche Problem stolpern.
Wenn ich Ihre Frage richtig verstanden habe, möchten Sie angeben, welche Tabellen generiert werden sollen. Es sollte möglich sein, wenn Sie dem Befehl den Parameter -Tables
hinzufügen.
Hier ist der Befehl, den ich zum Generieren von 3 Tabellen der Datenbank (in Package-Manager Console) verwendet habe:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;"
-Provider Microsoft.EntityFrameworkCore.SqlServer
-OutputDir Models -Context NorthwndContext
-Tables Products,Categories,Suppliers -Force
Wie Sie sehen, verwende ich die Northwnd-Datenbank und generiere nur die Tabellen "Produkte, Kategorien und Lieferanten". Natürlich können Sie weitere Tabellen hinzufügen, Sie müssen sie nur durch Kommas trennen.
Wenn Sie nicht wissen, können Sie den Datenbanknamen abrufen, indem Sie zu Data Connections (Server-Explorer) gehen, auf die Datenbank klicken, die Sie hinzufügen möchten. Auf der rechten Seite (Eigenschaften) wird eine Eigenschaft (Name) angezeigt. Für mich war es "NORTHWND.MDF".
Ich habe -Force
verwendet, um alle bereits erstellten Modelle zu überschreiben.
Sie können -DataAnnotations
verwenden, um kommentierte Modelle zu erhalten. Andernfalls erhalten Sie eine Fluent-Modellkonfiguration.
PS: Ich habe dies nur mit ASP.NET Core 2 und Entity Framework Core 2.0.0 versucht.
Meine Situation war, dass ich eine .net 4.5+ Klassenbibliothek mit DbContexts hatte.
Diese DbContexts wurden aus einer vorhandenen Datenbank mit dem Assistenten "Code zuerst aus vorhandener Datenbank" erstellt. Dieser Wizard scheint in EF Core zu fehlen.
Um einen neuen Code First DbContext aus einer vorhandenen, mit EF Core kompatiblen DB zu erstellen, folgte ich lose der Anleitung hier
Meine Schritte:
Erstellt eine neue Kernklassenbibliothek
Nuget-Paket Microsoft.EntityFrameworkCorehinzugefügt _
Das Nuget-Paket Microsoft.EntityFrameworkCore.SqlServer.Designwurde hinzugefügt.
Öffnet die Package Manager-Konsole von Nuget
Eingabe des Befehls
Scaffold-DbContext "data source=MYSQLDBSERVER\MYSQLINSTANCE;initial catalog=MYDB;integrated security=True;MultipleActiveResultSets=True;"
Als Anbieter eingetragen
Microsoft.EntityFrameworkCore.SqlServer
Bitte beachten Sie, dass bei Verwendung eines Nicht-Core-Projekts Probleme mit der nuget Package Manager-Konsole auftreten können. Ich habe dieses Problem vermieden, indem ich statt einer .net-Bibliothek nur eine neue Core-Klassenbibliothek erstellt habe.
Nachdem Sie den Kontext erstellt haben, können Sie ihn wie in Code First normal bearbeiten, z. Sie können die Tabellen löschen, die Sie nicht verwenden möchten.
Sie können auch die Cheater-Methode anwenden: Öffnen Sie VS2015, erstellen Sie eine neue Klassenlib mit demselben Namen wie das eigentliche Projekt, und führen Sie dann den Entity Data Model-Assistenten aus.
Wenn Sie fertig sind, kopieren Sie und fügen Sie sie in Ihr .net-Kernprojekt ein. Der resultierende Code ist ein wenig zu ändern, aber es ist trivial.
Das Ausführen des Gerüstbefehls wie oben ist jedoch eine bessere Lösung.
Diejenigen, die das SQL-Datenbankschema mithilfe des Dotnet-Core in einen EF-Core konvertieren möchten, führen die folgenden Schritte aus:
Führen Sie nacheinander alle Befehle aus (erster Befehl für alle, die ein neues Projekt erstellen möchten, ansonsten können Sie das ignorieren und führen Sie einfach andere gegebene Befehle aus dem Stammordner des Projekts aus.)
dotnet new mvc -o <ProjectName>
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet tool install --global dotnet-aspnet-codegenerator
Endlich...
dotnet ef dbcontext scaffold "Server=servername\instancename;Database=My_Database;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
Dadurch werden die erforderlichen Modelle und der Kontext Ihres Datenbankschemas im Ordner "Models" Ihres Projekts erstellt.
Jetzt können Sie ganz einfach CRUD code generieren, indem Sie den folgenden Befehl ausführen:
dotnet aspnet-codegenerator controller -name <MyNewController> -m <ModelName> -dc <MyDbContext> --relativeFolderPath Controllers --useDefaultLayout --referenceScriptLibraries
Ändern Sie den MyNewController mit Ihrem gewünschten Controller-Namen, ModelName mit dem Modellnamen innerhalb des Models-Ordners, den Sie anvisieren möchten, und schließlich MyDbContext mit dem vom System generierten Kontextdateinamen im Models-Ordner
bevor Sie diesen Befehl ausführen, vergewissern Sie sich jedoch, dass Sie die erforderlichen Änderungen an Ihrer Datei appsettings.json und startup.cs in Ihrem Projektordner vorgenommen haben
appsettings.json nach der Zeile hinzufügen
"AllowedHosts": "*",
"ConnectionStrings": {
"MyDbConnection": "Server=servername\\instancename;Database=My_Database;Trusted_Connection=True;"
}
startup.cs Datei unmittelbar vor der Zeile hinzufügen
services.AddMvc (). SetCompatibilityVersion (CompatibilityVersion.Version_2_2);
services.AddDbContext<SwiftRbs_LocalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnection")));
Genießen!!