Portieren eines codebasierten EF6-Modells auf EF Core
Wenn Sie alle wichtigen Hinweise gelesen haben und bereit für die Portierung sind, finden Sie hier einige Richtlinien für den Anfang.
Installieren von EF Core-NuGet-Paketen
Installieren Sie das NuGet-Paket für den gewünschten Datenbankanbieter, um EF Core zu verwenden. Wenn Sie SQL Server nutzen möchten, würden Sie beispielsweise Microsoft.EntityFrameworkCore.SqlServer
installieren. Weitere Informationen finden Sie unter Datenbankanbieter.
Wenn Sie beabsichtigen, Migrationen zu verwenden, sollten Sie auch das Microsoft.EntityFrameworkCore.Tools
-Paket installieren.
Sie müssen das EF6-NuGet-Paket (EntityFramework) nicht deinstallieren, da EF Core und EF6 parallel in derselben Anwendung verwendet werden können. Wenn Sie jedoch nicht beabsichtigen, EF6 in Ihrer Anwendung zu verwenden, kann das Deinstallieren des Pakets dazu beitragen, dass nur zu den Codebestandteilen Kompilierfehler ausgegeben werden, die wirklich Ihre Aufmerksamkeit erfordern.
Austauschen von Namespaces
Die meisten APIs, die Sie in EF6 verwenden, befinden sich im System.Data.Entity
-Namespace (und in den zugehörigen Subnamespaces). Die erste Codeänderung besteht darin, den Namespace durch Microsoft.EntityFrameworkCore
auszutauschen. In der Regel beginnen Sie mit der Codedatei, die den abgeleiteten Kontext enthält, und arbeiten von dort aus weiter, um Kompilierungsfehler zu beheben, sobald diese auftreten.
Kontextkonfiguration (z. B. Verbindungen)
Wie unter Konfigurieren der Datenbankverbindung beschrieben wird, ist EF Core beim Erkennen der Datenbank, mit der eine Verbindung hergestellt werden soll, weniger eigenständig. Sie müssen die OnConfiguring
-Methode in Ihrem abgeleiteten Kontext überschreiben und die datenbankanbieterspezifische API verwenden, um die Verbindung mit der Datenbank einzurichten.
In den meisten EF6-Anwendungen wird die Verbindungszeichenfolge in der Anwendungsdatei App/Web.config
gespeichert. In EF Core wird diese Verbindungszeichenfolge mit der ConfigurationManager
-API gelesen. Möglicherweise müssen Sie der Frameworkassembly einen Verweis System.Configuration
hinzufügen, um diese API verwenden zu können:
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
}
}
Warnung : Speichern Von Kennwörtern oder anderen vertraulichen Daten niemals in Quellcode- oder Konfigurationsdateien. Produktionsgeheimnisse sollten nicht für die Entwicklung oder für Tests verwendet werden. Geheimnisse sollten nicht mit der App bereitgestellt werden. Auf geheime Produktionsgeheimnisse sollte über ein kontrolliertes Mittel wie Azure Key Vault zugegriffen werden. Azure-Test- und Produktionsgeheimnisse können mit dem Azure Key Vault-Konfigurationsanbieter gespeichert und geschützt werden.
Aktualisieren Ihres Codes
An dieser Stelle ist es wichtig, Kompilierfehler zu beheben und ein Code Review durchzuführen, um festzustellen, ob die Verhaltensänderungen eine Auswirkung zeigen.
Vorhandene Migrationen
Es gibt derzeit keine umsetzbare Möglichkeit, vorhandene EF6-Migrationen auf EF Core zu portieren.
Sie sollten nach Möglichkeit davon ausgehen, dass alle vorherigen Migrationen von EF6 auf die Datenbank angewendet wurden und dann mit der Migration des Schemas von diesem Punkt aus unter Einsatz von EF Core beginnen. Hierfür können Sie den Befehl Add-Migration
verwenden, um eine Migration hinzuzufügen, sobald das Modell auf EF Core portiert wurde. Anschließend entfernen Sie den gesamten Code aus den Methoden Up
und Down
der Gerüstmigration. Nachfolgende Migrationen werden mit dem Modell verglichen, wenn für die anfängliche Migration ein Gerüst erstellt wurde.
Testen des Ports
Nur weil Ihre Anwendung erfolgreich kompiliert wird, bedeutet das nicht, dass sie auch erfolgreich auf EF Core portiert wurde. Sie müssen alle Bereiche Ihrer Anwendung testen, um sicherzustellen, dass keine der Verhaltensänderungen Ihre Anwendung beeinträchtigt hat.
Lesen Sie abschließend den Artikel Zu berücksichtigende Fälle beim Portieren, um weitere Informationen zu speziellen Fällen und Szenarios in Ihrem Code zu erhalten.