5

Ich spiele mit Entity Framework Core herum und habe an der Implementierung einer Database-First-Anwendung gearbeitet. Der ursprüngliche Scaffold-DbContext-Befehl funktioniert einwandfrei und erstellt alle meine Entitäten korrekt, wenn nicht wie gewünscht organisiert. Es ist eine SQL Server-Datenbank, die Schemas verwendet, um Verantwortungsbereiche zu trennen, und es interessiert mich nicht wirklich, dass das Scaffold sie einfach in einen einzigen Ordner wirft.Entity Framework Core Database - Erstes Update nach dem ersten Scaffold?

Abgesehen davon konnte ich nicht feststellen, ob es eine Möglichkeit gibt, das Scaffold neu zu starten, um die Klassen nach einer Datenbankaktualisierung zu aktualisieren. Die nächste Möglichkeit, die ich finden kann, besteht darin, den Befehl Scaffold-DbContext mit dem Parameter -force erneut auszuführen. Dies überschreibt jedoch auch jeden benutzerdefinierten Code, den ich der Datei "Context.cs" hinzugefügt habe, z. B. indem ich die Verbindungszeichenfolge anstelle von hardcoding auf einen Konfigurationswert zeige.

Ich habe mir ein paar andere Fragen ähnlich this one angesehen, aber es spricht nur über das erste Gerüst, nicht weitere Updates.

Gibt es eine Möglichkeit, zukünftige Änderungen manuell zu codieren, um dies zu tun? Ohne das scheint ein Datenbank-First-Ansatz mit EF Core absolut wertlos zu sein.

+0

Für Ihr Schema Kommentar basiert erstellen Sie so etwas wie dieses, wo ‚Integration‘ versuchen wollen kann, ist der Name des Schemas: Dotnet ef dbcontext scaffold "" Microsoft.EntityFrameworkCore.SqlServer -c "IntegrationContext" --schema "integration" -f –

Antwort

3

Wie Sie selbst gesagt haben ... Das Hauptproblem mit der ersten Datenbank-Methode: Sie sollten das Modell nie manuell ändern und Dinge umbenennen usw. Außer wenn Sie 100% sicher sind, dass sich Ihre Datenbank nicht mehr ändert. Wenn Sie nicht 100% ig sicher sind, codieren Sie einfach das Modell, das automatisch generiert wurde.

Berühren Sie niemals das Modell, zumindest bleibt das, was in der Datenbank gleich bleibt, auch im Modell gleich. Was sich geändert hat ... wird auch das Modell so verändern.

Aber Sie können partielle Klassen machen, die nicht durch automatische Zuordnung überschrieben werden:

public partial class TableName 
{ 
    public string Name_of_a_property 
    {get; set;} 
} 

Es ist ein netter kleiner Weg, um Code zu Ihrem Unternehmen hinzufügen, während sie sicher, dass es nicht durch auto- berührt werden Kartierung.

+1

Natürlich, da es Montag war, sind mir die Teilklassen nicht in den Sinn gekommen. Ich habe EF nach der Verwendung von EF5 für eine Weile verlassen. Habe diesen Ansatz komplett vergessen. Das wird funktionieren. Ich muss nur daran denken, nach Datenbank-Updates neu zu scaffold. – BBlake

+0

Ich verstehe nicht, wie es hilft. Ich glaube Ihnen. Ich weiß einfach nicht, wie ich es machen soll. Wenn ich meine Klassen zum ersten Mal aus der Datenbank erzeuge, wann mache ich die partielle Klasse und wo? Dann umcaffold? – johnny

+0

@johnny Sie können einfach eine neue Klasse zu Ihrem Projekt hinzufügen, und seltsamerweise, indem Sie die partielle Klasse den gleichen Namen nennen, wie Ihre Tabelle sie einander sehen lässt, können Sie zusätzliche Funktionen verwenden, die Sie in Teilklasse codiert haben. Während sich die Tabellenklasse beim Re-Scaffold ändern kann, wird die Partialklasse niemals verwendet. Code beliebig in den partiellen Klassen, nicht direkt in den Modellklassen. Dies gilt nur für DB zuerst.(ich hoffe, es macht besseres sens) –

1

Nachlauffähiges Gerüst kann für echte DB verwendet werden. Erste Annäherung wie answered by Antoine Pelletier.

Allerdings wird das Gerüst immer häufiger verwendet einmal für den ersten Import des Modells in Ihren Code, und dann weiter mit dem Code First Ansatz. Der Prozess Engineering Verwendung Reverse ein Entity Framework-Modell auf einer bestehenden Datenbank beschrieben in https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

+0

Ja, aber es scheint mir (mir) eine Menge Kopfschmerzen zu verursachen, wenn ich das tue. Ich hatte die gleichen Gedanken, aber in meiner Praxis wird es schwer zu tun, weil ich anfangen muss, mit den context.cs sowie meinen generierten Klassen zu spielen. Sagen Sie, wenn ich einen Fremdschlüssel oder etwas hinzufüge. – johnny

+0

@johnny, Code First geht davon aus, dass Sie Kontext- und Entitätsklassen nicht als generiert, sondern als Mastermodell betrachten. Ihre Änderungen werden in Code vorgenommen und dann über Migrationen auf die DB angewendet. Ich stimme jedoch zu, dass es manchmal schwierig sein kann. Sie können eingebettete Skripts für einige SQL-Änderungen ausführen, z. B. zusätzliche Indizes hinzufügen –

Verwandte Themen