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 System.Configuration
del 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);
}
}
Avviso Non archiviare mai password o altri dati sensibili nel codice sorgente o nei file di configurazione. I segreti di produzione non devono essere usati per lo sviluppo o il test. I segreti non devono essere distribuiti con l'app. È necessario accedere ai segreti di produzione tramite un mezzo controllato, ad esempio Azure Key Vault. I segreti di test e produzione di Azure possono essere archiviati e protetti con il provider di configurazione di Azure Key Vault.
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.