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.
Approfondimenti
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)