Pochi giorni fa Microsoft ha rilasciato Entity Framework Core 3, introducendo un bel po’ di miglioramenti sia dal punto di vista delle funzionalitá che delle performance (ed anche qualche breaking-change).

Adesso abbiamo completo supporto per diverse cose interessanti come C#8, Async Enumerables ed anche un LINQ provider nuovo di zecca.

Ultimamente a lavoro sto usando moltissimo Entity Framework ma ovviamente prima di fare qualunque aggiornamento alle dipendenze di un progetto é sempre necessario fare dei test.

Come spesso faccio quindi, ho deciso di scrivere un piccolo demo e provare alcune delle nuove funzionalitá. Potete trovare i sorgenti come al solito su GitHub.

Il mio obiettivo per questo progetto é di modellare un po’ di Aggregates e Value Objects mettendo in pratica la Persistence Ignorance. Sostanzialmente non voglio che le classi che si occupano di business logic vengano “contaminate” dal codice responsabile di salvare e leggere i dati.

Per fortuna Entity Framework Core offre la possibilitá di configurare il mapping entitá-tabelle con una comodissima Fluent Interface, evitando completamente quegli scomodi attributi sulle properties.

Abbiamo addirittura due opzioni. La prima é di scrivere tutto il codice di mapping nel metodo OnModelCreating() del nostro DbContext. Tutto molto semplice, ma puó portare ad un bel po’ di caos nel codice, soprattutto se il numero di entitá da configurare é alto.

La seconda opzione é quella di implementare l’interfaccia IEntityTypeConfiguration<> : con questa possiamo separare la configurazione per ogni singola entitá ed ottenere una struttura molto piú pulita.

Adottando questa seconda opzione ho modellato un semplice scenario di eCommerce con Products, Quotes ed Orders. Queste ultime due entitá contengono anche delle relazioni one-to-many con Quote Items e Order Lines rispettivamente.

Alla prima esecuzione l’applicazione creerá il database, che dovrebbe essere piú o meno cosí:

diagramma generato con https://sqldbm.com

Subito dopo il codice si occuperá di:

  1. creare qualche prodotto
  2. aggiungere solo un prodotto ad un preventivo e salvarlo
  3. aggiornare il preventivo aggiungendo un altro prodotto
  4. creare un ordine dal preventivo
  5. aggiungere un altro prodotto al preventivo
  6. creare un altro ordine

In un altro post daremo uno sguardo al codice e parleremo meglio delle configurazioni delle entitá. Restate collegati!