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
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Utilizzare QuickGrid di Blazor con Entity Framework
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Gestione degli stili CSS con le regole @layer
Rendere le variabili read-only in una pipeline di Azure DevOps
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Usare il colore CSS per migliorare lo stile della pagina
Estrarre dati randomici da una lista di oggetti in C#
Creare una libreria CSS universale: i bottoni
I più letti di oggi
- Minimal API in ASP.NET Core 8
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!