Conversione di un modello basato su codice EF6 in EF Core

Se hai letto tutte le avvertenze e sei pronto per la conversione, ecco alcune linee guida per iniziare.

Installare pacchetti NuGet di EF Core

Per usare EF Core, installare il pacchetto NuGet per il provider di database che si vuole usare. Ad esempio, quando la destinazione è SQL Server, è necessario installare Microsoft.EntityFrameworkCore.SqlServer. Per informazioni dettagliate, vedere Provider di database.

Se si prevede di usare le migrazioni, è necessario installare anche il Microsoft.EntityFrameworkCore.Tools pacchetto.

È consigliabile lasciare installato il pacchetto NuGet EF6 (EntityFramework), perché EF Core ed EF6 possono essere usati side-by-side nella stessa applicazione. Tuttavia, se non si intende usare EF6 in nessuna area dell'applicazione, la disinstallazione del pacchetto consentirà di generare errori di compilazione su parti di codice che richiedono attenzione.

Scambia spazi dei nomi

La maggior parte delle API usate in EF6 si trova nello System.Data.Entity spazio dei nomi (e negli spazi dei nomi secondari correlati). La prima modifica del codice consiste nello scambio con lo spazio dei Microsoft.EntityFrameworkCore nomi . In genere si inizierà con il file di codice di contesto derivato e quindi si eseguirà da questa posizione, risolvendo gli errori di compilazione man mano che si verificano.

Configurazione del contesto (connessione e così via)

Come descritto in Configurazione della connessione al database, EF Core ha meno magia per rilevare il database a cui connettersi. È necessario eseguire l'override del OnConfiguring metodo nel contesto derivato e usare l'API specifica del provider di database per configurare la connessione al database.

La maggior parte delle applicazioni EF6 archivia i stringa di connessione nel file delle applicazioniApp/Web.config. In EF Core si legge questa stringa di connessione usando l'APIConfigurationManager. Potrebbe essere necessario aggiungere un riferimento all'assembly del System.Configuration framework per poter usare questa 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);
    }
}

Aggiornare il codice

A questo punto, è importante risolvere gli errori di compilazione ed esaminare il codice per verificare se le modifiche del comportamento influisceranno sull'utente.

Migrazioni esistenti

Non esiste davvero un modo fattibile per convertire le migrazioni ef6 esistenti a EF Core.

Se possibile, è consigliabile presupporre che tutte le migrazioni precedenti da EF6 siano state applicate al database e quindi avviare la migrazione dello schema da quel punto usando EF Core. A tale scopo, usare il Add-Migration comando per aggiungere una migrazione dopo che il modello viene convertito in EF Core. Rimuovere quindi tutto il Up codice dai metodi e Down della migrazione con scaffolding. Le migrazioni successive verranno confrontate con il modello durante lo scaffolding della migrazione iniziale.

Testare la porta

Solo perché l'applicazione viene compilata, non significa che sia stata eseguita correttamente la conversione in EF Core. Sarà necessario testare tutte le aree dell'applicazione per assicurarsi che nessuna delle modifiche del comportamento abbia effetti negativi sull'applicazione.

Esaminare infine i casi dettagliati da considerare durante la conversione per altri consigli su casi e scenari specifici nel codice.