Informazioni su EF Core

Completato

Entity Framework Core è un mapper ORM (Object-Relational Mapper). Orm fornisce un livello tra il modello di dominio implementato nel codice e un database. EF Core è un'API di accesso ai dati che consente di interagire con il database usando la sintassi .NET POCO (Plain Old Common language runtime Objects) e la sintassi LINQ (Language Integrated Query) fortemente tipizzata.

Con EF Core il database viene astratto tramite oggetti POCO .NET. EF Core gestisce le interazioni dirette con il database sottostante. Quando si usa questa API, è possibile dedicare meno tempo alla conversione delle richieste da e verso il database e la scrittura di SQL e più tempo incentrato sulla logica di business importante.

Con EF Core è possibile:

  • Caricare i dati come oggetti C# (entità).
  • Aggiungere, modificare ed eliminare dati chiamando metodi su tali entità.
  • Eseguire il mapping di più tabelle di database a una singola entità C#.
  • Gestire i problemi di concorrenza che si verificano quando più utenti provano contemporaneamente ad aggiornare lo stesso record.
  • Usare la sintassi LINQ (System.Linq) per eseguire query sul database.
  • Accedere a più database, tra cui SQL Server, Sqlite, Azure Cosmos DB, PostgreSQL, MySQL e altri ancora.
  • Compilare il modello di dominio da un database esistente.
  • Gestire lo schema del database in base al modello di dominio.
  • Eseguire il commit delle modifiche a grafici di oggetti complessi, profondi e/o ampi di entità correlate con una singola chiamata al metodo.

Esaminare l'architettura di EF Core

Il diagramma seguente illustra l'architettura di EF Core:

Diagramma che mostra i componenti e i processi nell’architettura di EF Core.

DbContext è una classe speciale che rappresenta un'unità di lavoro. DbContext fornisce metodi per configurare opzioni, stringhe di connessione, registrazione e modello usato per eseguire il mapping del dominio al database.

Classi derivate da DbContext:

  • Rappresentano una sessione attiva con il database.
  • Salvano ed eseguono query su istanze di entità.
  • Includono proprietà di tipo DbSet<T> che rappresentano tabelle nel database.

Il provider di EF Core converte le modifiche negli oggetti grafici in codice SQL.

Il provider di database:

  • È una raccolta di plug-in progettata per un motore di database specifico, ad esempio SQL Server, Azure Cosmos DB o PostgreSQL.
  • Converte le chiamate al metodo e le query LINQ nel dialetto SQL nativo del database.
  • Estende EF Core in modo da abilitare funzionalità univoche per il motore di database.

Gestire schemi di database

EF Core offre due metodi principali per mantenere sincronizzati il modello di EF Core e lo schema di database:

  • Migrazioni (modello come origine di dati reali)
  • Reverse engineering (database come origine di dati reali)

Per scegliere tra i due, decidere se il modello di EF Core o lo schema del database è l'origine di dati reali.

Migrazioni

Nei progetti reali i modelli di dati cambiano quando vengono implementate le funzionalità dell'app. Quando vengono aggiunte e rimosse nuove entità, è necessario modificare di conseguenza gli schemi del database. La funzionalità delle migrazioni in EF Core rappresenta un metodo per l'aggiornamento incrementale dello schema del database per mantenere quest'ultimo sincronizzato con il modello di dati dell'applicazione mantenendo i dati esistenti nel database.

Quando viene introdotta una modifica al modello di dati, lo sviluppatore usa gli strumenti di EF Core per aggiungere una migrazione corrispondente. EF Core confronta il modello corrente con uno snapshot del modello precedente per determinare le differenze. Viene quindi generato il codice C# per implementare le modifiche. È possibile modificare i file C# per comportamenti personalizzati o per inizializzare i dati. I file sono tracciati nel controllo origine del progetto come ogni altro file di origine.

Dopo aver generato una nuova migrazione, è possibile applicarla a un database in vari modi. EF Core registra tutte le migrazioni applicate in una speciale tabella della cronologia. La tabella della cronologia registra le migrazioni applicate.

Reverse engineering

Il reverse engineering è il processo di scaffolding delle classi del modello di entità e di una classe DbContext basata su uno schema del database. Questo approccio viene spesso usato con database esistenti o condivisi che sono gestiti da un amministratore di database.

Nell'unità successiva si inizierà a usare EF Core con le migrazioni.

Verificare le conoscenze

1.

Quale classe fornisce un set di base di operazioni per configurare e interagire con il database?