Il Table-Splitting è una tecnica di mapping che permette di mappare una tabella su più entity. Questa tecnica torna utile quando abbiamo a che fare con tabelle con campi pesanti e poco utilizzati che vogliamo recuperare solo quando effettivamente necessari.
Supponiamo di avere una tabella Person con un campo Notes di tipo ntext che non utilizziamo quasi mai. Recuperare ogni volta questo campo è inutile perchè potrebbe contenere molti dati che non sono utilizzati. Per ottimizzare le performance, possiamo creare una entity Person (che contiene i dati principali) e una entity PersonExtended (che contiene le note). Entrambi gli oggetti si referenziano l'uno con l'altro e condividono la chiave primaria verso la tabella Persona.
public partial class PersonExtended { public int PersonId { get; set; } public string Notes { get; set; } public Employee Employee { get; set; } } public partial class Person { public int PersonId { get; set; } ... public PersonExtended PersonExtended { get; set; } }
Una volta create le entity dobbiamo solo mapparle verso il database specificando il mapping dei campi e specificando la relazione tra loro.
modelBuilder.Entity<Person>(entity => { entity.HasKey(e => e.PersonId); ... }); modelBuilder.Entity<PersoonExtended>(entity => { entity.ToTable("Person"); entity.HasKey(t => t.PersonId); entity.Property(t => t.Notes).HasMaxLength(1073741823).IsRequired(); entity .HasOne(t => t.Person) .WithOne(t => t.PersonExtended) .HasForeignKey<PersonExtended>(t => t.PersonId) .IsRequired() .OnDelete(DeleteBehavior.Cascade); });
La parte principale del mapping si trova sul mapping di PersonExtended. Qui specifichiamo il mapping la chiave primaria, della proprieta Notes, e poi diciamo che c'è una relazione 1-1 con l'entity Person, che a sua volta a una relazione 1-1 con PersonExtended e la relazione viene mantenuta tramite la proprietà PersonId che agisce da foreign key. Infine, specifichiamo che c'è una relazione di DeleteCascade tra le due entity.
Nei prossimi script vedremo come leggere e inserire dati quando si usa il Table-Splitting
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Configurare policy CORS in Azure Container Apps
Gestire liste di tipi semplici con Entity Framework Core
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Aggiungere interattività lato server in Blazor 8
Disabilitare automaticamente un workflow di GitHub (parte 2)
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Come migrare da una form non tipizzata a una form tipizzata in Angular
Utilizzare gli snapshot con Azure File shares
Implementare il throttling in ASP.NET Core
Definire stili a livello di libreria in Angular
Creazione di componenti personalizzati in React.js con Tailwind CSS
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs