Esplora i diversi approcci alle entità modello in Entity Framework

Entity Framework semplifica l'accesso ai dati nella tua applicazione consentendo di scrivere codice per eseguire operazioni CRUD (Crea, Leggi, Aggiorna ed Elimina) senza la necessità di interagire direttamente con il provider di database sottostante. Esistono tre approcci per modellare le entità in Entity Framework: Code First, Model First e Database First. Questo articolo discute tutti questi tre approcci e i loro pro e contro.

Cos'è Entity Framework? Perché tutto il clamore?

Entity Framework di Microsoft è un ORM esteso che ti aiuta a isolare il modello a oggetti della tua applicazione dal modello di dati. È un framework ORM open source per ADO.Net ed è incluso come parte di .Net Framework. Utilizzando gli strumenti ORM, è possibile concentrarsi sulla logica di business dell'applicazione e archiviare i dati nel database con molto meno codice. È possibile sfruttare un ORM per convertire i dati tra sistemi di tipo incompatibile: è possibile memorizzare gli oggetti di dominio nel database sottostante senza doversi preoccupare delle complessità interne su come i dati vengono effettivamente archiviati. Entity Framework è un ORM maturo di Microsoft e può essere utilizzato con un'ampia varietà di database.

Nelle sezioni che seguono, esploreremo ciascuno dei tre approcci alla modellazione di entità usando Entity Framework.

Code First

L'approccio Code First ti aiuta a creare le entità nella tua applicazione concentrandoti sui requisiti del dominio. In sostanza, puoi seguire Domain Driven Design (DDD) utilizzando questo approccio. Dopo aver definito le entità e specificate le configurazioni, è possibile creare il database al volo utilizzando entrambi. L'approccio Code First offre un maggiore controllo sul codice: non è più necessario lavorare con il codice generato automaticamente. Mi piace questo approccio in quanto ti dà molta flessibilità e controllo. Se hai le classi di dominio pronte, preferirei sempre questo approccio poiché puoi creare facilmente il tuo database dalle classi di dominio.

Lo svantaggio di questo approccio è che qualsiasi modifica allo schema del database sottostante andrebbe persa; in questo approccio il codice definisce e crea il database. L'approccio Code First consente di utilizzare Entity Framework e definire il modello di entità senza il designer oi file XML. È possibile utilizzare l'approccio POCO (Plain Old CLR Objects) per definire il modello e generare il database.

In questo approccio creeresti tipicamente le classi di entità. Ecco un esempio; di seguito viene fornita una tipica classe di entità.

 public class Product

   {

      public int ProductId { get; set; }

      public string ProductName { get; set; }

      public float Price { get; set; }

   }

Successivamente, è necessario definire un contesto dati personalizzato estendendo la classe DbContext come mostrato di seguito.

public class Context : DbContext

   {

      public DbSet Products { get; set; }

   }

Infine, è necessario specificare la stringa di connessione nel file di configurazione. Hai fatto!

Database First

È possibile utilizzare l'approccio Database First se il database è già progettato ed è pronto. In questo approccio, l'Entity Data Model (EDM) viene creato dal database sottostante. Ad esempio, si utilizza il primo approccio al database quando si generano i file edmx nell'IDE di Visual Studio dal database. Le modifiche manuali al database sono possibili facilmente ed è sempre possibile aggiornare l'EDM se necessario (ad esempio, se lo schema del database sottostante cambia). Per fare ciò, è sufficiente aggiornare l'EDM dal database nell'IDE di Visual Studio.

Primo modello

Nell'approccio Model First è possibile creare prima l'EDM, quindi generare il database da esso. In genere si crea un EDM vuoto utilizzando la procedura guidata Entity Data Model in Visual Studio, si definiscono le entità e le loro relazioni in Visual Studio, quindi si genera il database da questo modello definito. È possibile creare facilmente entità e definirne le relazioni e le associazioni nella finestra di progettazione in Visual Studio. È inoltre possibile specificare la proprietà Key e i tipi di dati per le proprietà delle entità utilizzando il designer. È possibile utilizzare classi parziali per implementare funzionalità aggiuntive nelle entità.

OK, ma quando dovresti usare l'approccio Model First? Bene, se né le classi di dominio né il database sono pronti e preferiresti definire il modello di dati utilizzando un visual designer, questo approccio è per te. Tuttavia, come nell'approccio Code First, nell'approccio Model First le modifiche manuali al database andrebbero perse poiché il modello definisce il database.