Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie die Datenbank als Quelle der Wahrheit verwenden, umfasst das Upgrade hauptsächlich alle Änderungen an der Form der generierten Entitäten. Der Ablauf der Migration umfasst:
- Wählen Sie einen Punkt in der Zeit aus, um die Datenbank zu modellieren.
- Stellen Sie sicher, dass Ihre EF6-Projekte auf dem neuesten Stand und in der Synchronisierung mit der Datenbank sind.
- Erstellen Sie das EF Core-Projekt.
- Verwenden Sie die Scaffolding-Tools, um Ihre Datenbank in Code rückzuentwickeln.
- Überprüfen Sie, ob die von EF Core generierten Klassen mit Ihrem Code kompatibel sind.
- Ändern Sie bei Ausnahmen entweder die generierten Klassen, und aktualisieren Sie die Modellkonfiguration , oder passen Sie den Code an das Modell an.
Beachten Sie, dass ef Core derzeit alles erstellt, was zum erfolgreichen Generieren einer Kopie der Datenbank benötigt wird, für den Datenbank-ersten Ansatz jedoch kein Großteil des Codes erforderlich ist. Ein Fix dafür wird in Problem Nr. 10890 nachverfolgt. Zu den Dingen, die Sie sicher ignorieren können, zählen: Sequenzen, Einschränkungsnamen, nicht eindeutige Indizes und Indexfilter.
Behandeln von Schemaänderungen
Wenn Ihre Datenbank die Quelle der Wahrheit ist, ruft EF Core Schemainformationen aus der Datenbank ab, anstatt sie über Migrationen zu pushen. Der typische Workflow besteht darin, den Reverse Engineering-Schritt bei jeder Änderung des Datenbankschemas erneut auszuführen. Eine umfassende Testsuite ist für diesen Ansatz nützlich, da Sie den Gerüstprozess automatisieren und die Änderungen überprüfen können, indem Sie Ihre Tests ausführen.
Tipps zum Behandeln von Modellunterschieden
Aus verschiedenen Gründen möchten Sie, dass Ihr C#-Domänenmodell anders gestaltet wird als das Modell, das im Reverse-Engineering generiert wurde. In vielen Fällen bedeutet dies, dass der code, der nach jeder Schemaänderung automatisch generiert wird, manuell aktualisiert wird. Eine Möglichkeit, zusätzlichen Aufwand zu vermeiden, wenn der Code neu generiert wird, besteht darin, partielle Klassen für Ihre DbContext- und verwandten Entitäten zu verwenden. Anschließend können Sie Code im Zusammenhang mit Geschäftslogik und Eigenschaften beibehalten, die nicht in der Datenbank in einer separaten Gruppe von Klassendateien nachverfolgt werden, die nicht überschrieben werden.
Wenn sich Ihr Modell erheblich von dem generierten Modell unterscheidet, sich jedoch nicht häufig ändert, ist eine Möglichkeit, das Repositorymuster als Adapter zu verwenden. Das Repository kann die von EF Core generierten Klassen nutzen und die von Ihnen verwendeten benutzerdefinierten Klassen veröffentlichen. Dies kann die Auswirkungen von Änderungen verringern, indem sie in den Repositorycode eingebettet werden, anstatt jedes Mal eine anwendungsweite Umgestaltung durchzuführen, wenn sich das Schema ändert.
Möglicherweise sollten Sie einen alternativen Workflow in Betracht ziehen und die Schritte ausführen, die dem Hybridansatz ähneln. Anstatt jedes Mal einen neuen Satz von Klassen zu generieren, geben Sie bestimmte Tabellen an, um nur neue Klassen zu generieren. Sie behalten vorhandene Klassen unverändert bei und fügen eigenschaften, die sich geändert haben, direkt hinzu oder entfernen sie. Anschließend aktualisieren Sie die Modellkonfiguration, um alle Änderungen der Zuordnung der Datenbank zu Ihren vorhandenen Klassen zu beheben.
Anpassen der Codegenerierung
EF Core 6 unterstützt derzeit keine Anpassung des generierten Codes. Es gibt Lösungen von Drittanbietern wie EF Core Power Tools , die verfügbar sind. Eine Liste der empfohlenen Communitytools und -erweiterungen finden Sie unter EF Core Tools and Extensions.
Überprüfen Sie schließlich die detaillierte Liste der Unterschiede zwischen EF6 und EF Core , um alle verbleibenden Probleme mit der Portierung zu beheben.