Confrontare EF Core & EF6

EF Core

Entity Framework Core (EF Core) è un mapper di database a oggetti moderno per .NET. Supporta le query LINQ, il rilevamento delle modifiche, gli aggiornamenti e le migrazioni dello schema.

EF Core funziona con SQL Server/database SQL di Azure, SQLite, Azure Cosmos DB, MySQL, PostgreSQL e molti altri database tramite un modello di plug-in del provider di database.

EF6

Entity Framework 6 (EF6) è un mapper relazionale a oggetti progettato per .NET Framework ma con supporto per .NET Core. EF6 è un prodotto stabile e supportato, ma non è più in sviluppo attivo.

Confronto tra le funzionalità

EF Core offre nuove funzionalità che non verranno implementate in EF6. Tuttavia, non tutte le funzionalità di EF6 sono attualmente implementate in EF Core.

Le tabelle seguenti confrontano le funzionalità disponibili in EF Core e in EF6. Questo è un confronto generale in cui non vengono elencate tutte le funzionalità o illustrate le differenze tra la stessa funzionalità nelle diverse versioni di Entity Framework.

La colonna EF Core contiene la versione del prodotto in cui la funzionalità è apparsa per la prima volta.

Creazione di un modello

Funzionalità EF6.4 EF Core
Mapping delle classi di base 1.0
Costruttori con parametri 2.1
Conversioni di valori di proprietà 2.1
Tipi con mapping senza chiavi 2.1
Convenzioni 1.0
Convenzioni personalizzate 1.0 (parziale; #214)
Annotazioni dei dati 1.0
API Fluent 1.0
Ereditarietà: tabella per gerarchia 1.0
Ereditarietà: tabella per tipo 5,0
Ereditarietà: tabella per classe concreta Nel backlog (#3170)
Proprietà con stato shadow 1.0
Chiavi alternative 1.0
Navigazioni molti-a-molti 5,0
Molti-a-molti senza entità join 5,0
Generazione di chiavi: database 1.0
Generazione di chiavi: client 1.0
Tipi complessi/di proprietà 2,0
Dati spaziali 2.2
Formato del modello: codice 1.0
Creazione del modello dal database: riga di comando 1.0
Aggiornamento del modello dal database Partial Nel backlog (#831)
Filtri di query globali 2,0
Suddivisione di tabelle 2,0
Suddivisione di entità Nel backlog (#620)
Mapping di funzione scalare del database Scarso 2,0
Mapping di funzioni con valori di tabella di database Scarso 5,0
Mapping campi 1.1
Tipi riferimento nullable (C# 8.0) 3,0
Visualizzazione grafica del modello Nessun supporto pianificato (1)
Editor di modello grafico Nessun supporto pianificato (1)
Formato del modello: EDMX (XML) Nessun supporto pianificato (1)
Creazione del modello dal database: procedura guidata di VS Nessun supporto pianificato (1)

Query sui dati

Funzionalità EF6.4 EF Core
Query LINQ 1.0
Query SQL generate come leggibili Scarso 1.0
Conversione di GroupBy 2.1
Caricamento dei dati correlati: eager 1.0
Caricamento dei dati correlati: caricamento eager per i tipi derivati 2.1
Caricamento dei dati correlati: lazy 2.1
Caricamento dei dati correlati: esplicito 1.1
Query SQL non elaborate: tipi di entità 1.0
Query SQL non elaborate: tipi di entità senza chiave 2.1
Query SQL non elaborate: composizione con LINQ 1.0
Query compilate esplicite Scarso 2,0
await foreach (C# 8.0) 3,0
Linguaggio di query basato su testo (Entity SQL) Nessun supporto pianificato (1)

Salvataggio dei dati

Funzionalità EF6.4 EF Core
Rilevamento modifiche: snapshot 1.0
Rilevamento modifiche: notifica 1.0
Rilevamento delle modifiche: proxy 5,0
Accesso allo stato registrato 1.0
Concorrenza ottimistica 1.0
Transazioni 1.0
Invio in batch di istruzioni 1.0
Mapping di stored procedure Nel backlog (#245)
API di basso livello grafo disconnesso Scarso 1.0
End-to-end grafo disconnesso 1.0 (parziale; #5536)

Altre funzionalità

Funzionalità EF6.4 EF Core
Migrazioni 1.0
API di creazione/eliminazione del database 1.0
Dati del valore di inizializzazione 2.1
Resilienza delle connessioni 1.1
Intercettori 3,0
Eventi 3.0 (parziale; #626)
Registrazione semplice (Database.Log) 5,0
Pooling DbContext 2,0

Provider di database (2)

Funzionalità EF6.4 EF Core
SQL Server 1.0
MySQL 1.0
PostgreSQL 1.0
Oracle 1.0
SQLite 1.0
SQL Server Compact 1.0 (3)
DB2 1.0
Firebird 2,0
Jet (Microsoft Access) 2.0 (3)
Azure Cosmos DB 3,0
In memoria (per il test) 1.0

1 Alcune funzionalità di EF6 non verranno implementate in EF Core. Queste funzionalità dipendono dal modello EDM (Entity Data Model) sottostante di EF6 e/o sono funzionalità complesse con ritorno sugli investimenti relativamente basso. I commenti e i suggerimenti dei clienti sono sempre benvenuti, ma mentre EF Core supporta molti aspetti non possibili in EF6, non è fattibile viceversa per EF Core supportare tutte le funzionalità di EF6.

2 EF Core provider di database implementati da terze parti potrebbero subire ritardi nell'aggiornamento alle nuove versioni principali di EF Core. Vedere Provider di database per altre informazioni.

3 I provider SQL Server Compact e Jet funzionano solo .NET Framework (non in .NET Core).

Piattaforme supportate

EF Core 3.1 viene eseguito in .NET Core e .NET Framework, tramite l'uso di .NET Standard 2.0. Tuttavia, EF Core 5.0 non viene eseguito in .NET Framework. Per altri dettagli, vedere Piattaforme.

EF 6.4 viene eseguito in .NET Core e .NET Framework, tramite multitargeting.

Linee guida per le nuove applicazioni

Usare EF Core in .NET Core per tutte le nuove applicazioni, a meno che l'app non richieda caratteristiche supportate solo in .NET Framework.

Linee guida per le applicazioni EF6 esistenti

EF Core non è una sostituzione diretta per EF6. Il passaggio da EF6 a EF Core richiederà probabilmente modifiche all'applicazione.

Per il passaggio di un'app EF6 a .NET Core:

  • Continuare a usare EF6 se il codice di accesso ai dati è stabile e non è probabile che si evolva o che siano necessarie nuove funzionalità.
  • Eseguire la conversione a EF Core se il codice di accesso ai dati è in evoluzione o se l'app necessita di nuove funzionalità disponibili solo in EF Core.
  • La conversione a EF Core viene spesso eseguita anche per le prestazioni. Tuttavia, non tutti gli scenari sono più veloci, quindi eseguire prima di tutto una profilatura.

Per altre informazioni, vedere Porting from EF6 to EF Core (Conversione da EF6 a EF Core).