Che cos'è Entity Framework Core?

Completato

La maggior parte delle applicazioni Web più complesse deve eseguire in modo affidabile le operazioni sui dati come la creazione, la lettura, l'aggiornamento e l'eliminazione (CRUD). Devono anche rendere persistenti tutte le modifiche apportate da queste operazioni tra i riavvii dell'applicazione. Sebbene siano disponibili varie opzioni per salvare in modo permanente i dati nelle applicazioni .NET, Entity Framework (EF) Core è una soluzione intuitiva e ideale per molte applicazioni .NET.

Informazioni su EF Core

EF Core è una tecnologia di accesso ai dati leggera, estendibile, open source e multipiattaforma per le applicazioni .NET.

EF Core può fungere da strumento di mapping relazionale orientato agli oggetti che:

  • Consente agli sviluppatori .NET di operare su un database usando oggetti .NET.
  • Elimina la necessità della maggior parte del codice di accesso ai dati che in genere deve essere scritto.

EF Core supporta molti dei database più diffusi, tra cui SQLite, MySQL, PostgreSQL, Oracle e Microsoft SQL Server.

Il modello

Con Entity Framework Core, l'accesso ai dati viene eseguito tramite un modello. Un modello è costituito da classi di entità e da un contesto dell'oggetto che rappresenta una sessione con il database che consente di eseguire query e salvare i dati.

Classe di entità

In questo scenario si implementa un'API di gestione dell'archivio pizze, quindi si usa una classe di entità Pizza. Le pizze nell'archivio hanno un nome e una descrizione. È necessario anche un ID per consentire all'API e al database di identificarle. La classe di entità Pizza che viene usata nell'applicazione identifica le pizze:

namespace PizzaStore.Models 
{
  public class Pizza
  {
      public int Id { get; set; }
      public string? Name { get; set; }
      public string? Description { get; set; }
  }
}

Classe di contesto

Questa applicazione ha una sola classe di entità, ma la maggior parte delle applicazioni ha più classi di entità. La classe di contesto è responsabile dell'esecuzione di query e del salvataggio dei dati nelle classi di entità e della creazione e gestione della connessione di database.

Eseguire operazioni CRUD con EF Core

Dopo aver configurato EF Core, è possibile usarlo per eseguire operazioni CRUD sulle classi di entità. È quindi possibile sviluppare su classi C#, delegando le operazioni del database alla classe di contesto. I provider di database a loro volta la convertono nel linguaggio di query specifico del database, ad esempio SQL per un database relazionale. Le query vengono sempre eseguite sul database, anche se le entità restituite nel risultato esistono già nel contesto.

Eseguire query sui dati

L'oggetto contesto espone una classe di raccolta per ogni tipo di entità. Nell'esempio precedente la classe di contesto espone una raccolta di oggetti Pizza come Pizzas. Poiché è presente un'istanza della classe di contesto, è possibile eseguire una query sul database per tutte le pizze:

var pizzas = await db.Pizzas.ToListAsync();

Inserire i dati

È possibile usare lo stesso oggetto contesto per inserire una nuova pizza:

await db.pizzas.AddAsync(
    new Pizza { ID = 1, Name = "Pepperoni", Description = "The classic pepperoni pizza" });

Eliminare dati

Le operazioni di eliminazione sono semplici. Richiedono solo un ID dell'elemento da eliminare:

var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
    //Handle error
}
db.pizzas.Remove(pizza);

Aggiornamento dei dati

Analogamente, è possibile aggiornare una pizza esistente:

int id = 1;
var updatepizza = new Pizza { Name = "Pineapple", Description = "Ummmm?" };
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
    //Handle error
}
pizza.Description = updatepizza.Description;
pizza.Name = updatepizza.Name;
await db.SaveChangesAsync();

Usare il database in memoria di EF Core

EF Core include un provider di database in memoria che può essere usato per testare l'applicazione. Il provider di database in memoria è utile per il test e lo sviluppo, ma non deve essere usato nell'ambiente di produzione. Nell'unità successiva si userà il provider di database in memoria per creare un database ed eseguire operazioni CRUD su di esso.