webentwicklung-frage-antwort-db.com.de

Entity Framework Core zum Erstellen eines Modells aus einer vorhandenen Datenbank

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?

15
Dean Kuga

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

6
Shloimy

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.

37
HiHo

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.Toolshinzugefügt. _
  • Das Nuget-Paket Microsoft.EntityFrameworkCore.SqlServerwurde hinzugefü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.

5
Yamamoto Hagi

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.

2
Greg Gum

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!!

0
Manoj Roy