Portera en EF6 kodbaserad modell till EF Core

Om du har läst alla varningar och är redo att porta, så här är några riktlinjer som hjälper dig att komma igång.

Installera EF Core NuGet-paket

Om du vill använda EF Core installerar du NuGet-paketet för den databasprovider som du vill använda. När du till exempel riktar in dig på SQL Server, installerar du Microsoft.EntityFrameworkCore.SqlServer. Mer information finns i Databasprovidrar .

Om du planerar att använda migreringar bör du även installera Microsoft.EntityFrameworkCore.Tools paketet.

Det går bra att låta EF6 NuGet-paketet (EntityFramework) vara installerat eftersom EF Core och EF6 kan användas sida vid sida i samma program. Men om du inte tänker använda EF6 i några områden i ditt program, kommer avinstallationen av paketet att hjälpa till att ge kompileringsfel på koddelar som behöver åtgärdas.

Växla namnområden

De flesta API:er som du använder i EF6 finns i System.Data.Entity namnområdet (och relaterade undernamnsrymder). Den första kodändringen är att växla till Microsoft.EntityFrameworkCore namnområdet. Du skulle vanligtvis börja med din härledda kontextkodfil och sedan träna därifrån och åtgärda kompileringsfel när de inträffar.

Kontextkonfiguration (anslutning osv.)

Som beskrivs i konfigurationen av databasanslutningen har EF Core mindre magi när det gäller att identifiera databasen att ansluta till. Du måste åsidosätta metoden i OnConfiguring din härledda kontext och använda databasproviderns specifika API för att konfigurera anslutningen till databasen.

De flesta EF6-program lagrar anslutningssträngen i programfilen App/Web.config . I EF Core läser du den här anslutningssträngen med hjälp av API:et ConfigurationManager . Du kan behöva lägga till en referens till ramverkssammansättningen System.Configuration för att kunna använda det här API:et:

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

Varning Lagra aldrig lösenord eller andra känsliga data i källkods- eller konfigurationsfiler. Produktionshemligheter ska inte användas för utveckling eller testning. Hemligheter ska inte distribueras med appen. Produktionshemligheter bör nås via ett kontrollerat sätt som Azure Key Vault. Azure-test- och produktionshemligheter kan lagras och skyddas med Azure Key Vault-konfigurationsprovidern.

Uppdatera koden

Nu handlar det om att åtgärda kompileringsfel och granska kod för att se om beteendeändringarna påverkar dig.

Befintliga migreringar

Det finns egentligen inte ett genomförbart sätt att portera befintliga EF6-migreringar till EF Core.

Om möjligt är det bäst att anta att alla tidigare migreringar från EF6 har tillämpats på databasen och sedan börjar migrera schemat från den tidpunkten med hjälp av EF Core. För att göra detta använder Add-Migration du kommandot för att lägga till en migrering när modellen har porterats till EF Core. Du skulle sedan ta bort all kod från metoderna Up och Down för den byggda migreringen. Efterföljande migreringar jämförs med modellen när den första migreringen gjordes med en autogenererad kod.

Testa porten

Bara för att programmet kompileras betyder det inte att det har porterats till EF Core. Du måste testa alla områden i ditt program för att säkerställa att ingen av beteendeändringarna har påverkat ditt program negativt.

Granska slutligen de detaljerade fall som du bör tänka på när du porterar för mer information om specifika fall och scenarier i din kod.