Una delle principali novità di Entity Framework Core 8 (EF8) è la possibilità, finalmente, di mappare liste contenenti tipi semplici, dove il tipo semplice può essere una stringa, un intero, un booleano e così via. Prima della versione 8, non era infatti possibile avere un'entity che esponesse una proprietà di tipo List<T>, dove T può essere string o int o un altro tipo semplice.
Per avere un comportamente simile, ma non identico, dovevamo creare una entity con un Id e la proprietà di tipo semplice e poi sfruttare una sottotabella o un campo JSON per mapparla. A partire dalla versione 8, grazie al supporto a JSON sempre più integrato nel motore, possiamo invece avere entity con liste semplici che non sono solo mappate nativamente da EF Core, ma supportano anche operazioni come filtro, selezione e altro ancora.
Come accennato, il supporto alle liste di tipi semplici è possible grazie a JSON. Non deve stupire quindi che queste proprietà siano persistite sul database non tramite una sottotabella, ma tramite un campo della tabella che contiene i valori della proprietà serializzati in JSON. Supponiamo di avere la seguente entity.
public class Person { public int Id { get; set; } public string Name { get; set; } public List<string> Nicknames { get; set; } }
Per default, questa entity viene mappata sulla tabella Person con i campi Id, Name e Nicknames quest'ultimo con valori in JSON. Questo significa che il codice del prossimo snippet produrrà un SQL come quello sottostante.
var p = new Person() { Name = "Stefano", Nickname = ["Sop1", "Sop2"] }; ctx.Add(p); await ctx.SaveChangesAsync();
Insert into Person (Name, Nicknames) Values ('Stefano', '["Sop1", "Sop2"]')
Nei prossimi script vedremo come personalizzare il mapping e come usare LINQ per eseguire query che sfruttino questo tipo di proprietà
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Escludere alcuni file da GitHub Secret Scanning
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Usare il colore CSS per migliorare lo stile della pagina
Estrarre dati randomici da una lista di oggetti in C#
Ordine e importanza per @layer in CSS
Triggerare una pipeline su un altro repository di Azure DevOps
Utilizzare WhenEach per processare i risultati di una lista di task
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Creare una libreria CSS universale: Cards
Ottimizzare le performance usando Span<T> e il metodo Split
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow