Entity Framework Core 7 introduce la terza modalità di mapping dell'ereditarietà: Table-Per-Concrete (TPC). Questa modalità prevede una tabella per ogni tipo concreto della gerarchia evitando quindi di creare la tabella base come avviene per il modello Table-Per-Type (TPT) e di avere una sola tabella denormalizzata con tutti i dati come avviene per il modello Table-Per-Hierarchy (TPH).
Questo significa che se abbiamo una classe base astratta Animal e le classi derivate Cat e Dog, verranno create sul database solo le tabelle Cats e Dogs che conterranno ognuna i campi della classe base astratta più i dati del tipo specifico.
Questa tecnica è sicuramente da preferire al TPT per ovvie ragioni di performance e, nel caso non si facciano mai query sull'entity base ma solo sui tipi specifici, anche al TPH per ragioni di pulizia del database (le tabelle sono specifiche per tipo mentre nel TPH c'è una sola grande tabella per tutti i tipi).
Per mappare una gerarchia di oggetti usando il TPC, dobbiamo utilizzare il metodo UseTphMappingStrategy sull'entity in fase di mapping.
public abstract class Animal { } public class Cat : Animal { } public class Dog : Animal { } class MyContext : DbContext { public DbSet<Animal> Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Animal>().UseTpcMappingStrategy(); } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.