Portieren einer codebasierten Modells mit EF6 zu EF CorePorting an EF6 Code-Based Model to EF Core

Wenn Sie alle die Einschränkungen gelesen haben und portieren möchten, klicken Sie dann sind hier einige Richtlinien, die Ihnen beim Einstieg helfen.If you've read all the caveats and you are ready to port, then here are some guidelines to help you get started.

Installieren von EF Core NuGet-PaketenInstall EF Core NuGet packages

Um EF Core zu verwenden, installieren Sie das NuGet-Paket für den Anbieter, die, den Sie verwenden möchten.To use EF Core, you install the NuGet package for the database provider you want to use. Beispielsweise, wenn SQL Server angezielt wurde, Sie würden installieren Microsoft.EntityFrameworkCore.SqlServer.For example, when targeting SQL Server, you would install Microsoft.EntityFrameworkCore.SqlServer. Finden Sie unter Datenbankanbieter Details.See Database Providers for details.

Wenn Sie Migrationen verwenden möchten, sollten Sie auch installieren die Microsoft.EntityFrameworkCore.Tools Paket.If you are planning to use migrations, then you should also install the Microsoft.EntityFrameworkCore.Tools package.

Es ist in Ordnung, das EF6-NuGet-Paket ("EntityFramework"), die installiert ist, zu verlassen, da EF Core und EF6 verwendete Seite-an-Seite in der gleichen Anwendung sein kann.It is fine to leave the EF6 NuGet package (EntityFramework) installed, as EF Core and EF6 can be used side-by-side in the same application. Jedoch wenn Sie nicht sind EF6 in alle Bereiche der Anwendung verwenden, können klicken Sie dann das Paket deinstallieren Kompilierungsfehler auf Teile des Codes, die Ihre Aufmerksamkeit erfordern.However, if you aren't intending to use EF6 in any areas of your application, then uninstalling the package will help give compile errors on pieces of code that need attention.

Swap-namespacesSwap namespaces

Die meisten APIs, die in EF6 verwendet werden, der System.Data.Entity Namespace (und verwandte untergeordneten Namespaces).Most APIs that you use in EF6 are in the System.Data.Entity namespace (and related sub-namespaces). Die erste Änderung des Codes wird zum Austauschen der Microsoft.EntityFrameworkCore Namespace.The first code change is to swap to the Microsoft.EntityFrameworkCore namespace. Sie würden normalerweise beginnen Sie mit Ihrem abgeleiteten Kontext Codedatei und dann ausarbeiten dort Adressierung Kompilierungsfehler, sobald sie auftreten.You would typically start with your derived context code file and then work out from there, addressing compilation errors as they occur.

Kontextbezogene Konfigurationen der (Verbindung usw.).Context configuration (connection etc.)

Siehe stellen Sie sicher EF Core wird Arbeit für die Anwendung, EF Core verfügt über weniger Magic-Befehl in der Datenbank für die Verbindung zu erkennen.As described in Ensure EF Core Will Work for Your Application, EF Core has less magic around detecting the database to connect to. Sie benötigen zum Überschreiben der OnConfiguring Methode auf Ihrem abgeleiteten Kontext ein, und verwenden Sie die jeweilige Datenbank-Anbieter-API, um das Einrichten der Verbindung mit der Datenbank.You will need to override the OnConfiguring method on your derived context, and use the database provider specific API to setup the connection to the database.

Die meisten EF6-Anwendungen speichern die Verbindungszeichenfolge in den Anwendungen App/Web.config Datei.Most EF6 applications store the connection string in the applications App/Web.config file. In EF Core Sie lesen diese Verbindungszeichenfolge mithilfe der ConfigurationManager API.In EF Core, you read this connection string using the ConfigurationManager API. Sie müssen möglicherweise einen Verweis auf Hinzufügen der System.Configuration Framework-Assembly, um diese API verwenden zu können.You may need to add a reference to the System.Configuration framework assembly to be able to use this API.

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);
    }
}

Aktualisieren Sie Ihren codeUpdate your code

An diesem Punkt ist es lediglich die Adressierung von Kompilierungsfehlern und Überprüfen von Code, um festzustellen, ob die verhaltensänderungen Auswirkungen informiert.At this point, it's a matter of addressing compilation errors and reviewing code to see if the behavior changes will impact you.

Vorhandener MigrationenExisting migrations

Derzeit nicht wirklich möglich, vorhandene EF6-Migrationen zu EF Core zu portieren.There isn't really a feasible way to port existing EF6 migrations to EF Core.

Wenn möglich, empfiehlt es sich davon ausgehen, dass alle vorherige Migrationen von EF 6 auf die Datenbank angewendet wurden, und zeigen Sie dann das Schema aus, die Migration starten mit EF Core.If possible, it is best to assume that all previous migrations from EF6 have been applied to the database and then start migrating the schema from that point using EF Core. Zu diesem Zweck verwenden Sie die Add-Migration Befehl aus, um eine Migration hinzufügen, nachdem das Modell zu EF Core portiert wird.To do this, you would use the Add-Migration command to add a migration once the model is ported to EF Core. Sie würden dann entfernen Sie sämtlichen Code aus der Up und Down Methoden der erstellten Migration.You would then remove all code from the Up and Down methods of the scaffolded migration. Bei der anfänglichen Migration Gerüst erstellt wurde, werden die nachfolgende Migrationen für das Modell verglichen.Subsequent migrations will compare to the model when that initial migration was scaffolded.

Testen Sie den portTest the port

Nur weil die Anwendung kompiliert wird, bedeutet nicht, dass es erfolgreich in EF Core portiert werden.Just because your application compiles, does not mean it is successfully ported to EF Core. Sie benötigen, um alle Bereiche der Anwendung, um sicherzustellen, dass keine der Änderungen des Verhaltens Ihrer Anwendung beeinträchtigt haben zu testen.You will need to test all areas of your application to ensure that none of the behavior changes have adversely impacted your application.