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
Utilizzare Locust con Azure Load Testing
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Creare una libreria CSS universale: Clip-path
Utilizzare i variable font nel CSS
Referenziare un @layer più alto in CSS
Utilizzare una qualunque lista per i parametri di tipo params in C#
Ridurre il reflow ottimizzando il CSS
Creare una libreria CSS universale: Nav menu
Evitare memory leaks nelle closure JavaScript
Il nuovo controllo Range di Blazor 9
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Loggare le query più lente con Entity Framework
I più letti di oggi
- Integrare OpenAI tramite Aspire
- Usare l'explicit operator per eseguire codice di mapping in C#
- Interagire con Azure DevOps tramite MCP Server
- Creare un agente A2Acon Azure Logic Apps
- Office 2007 Developer Conference, il 13 e 14 Giugno a Milano
- Gestione file Javascript in Blazor con .NET 9
- Definire il colore di una scrollbar HTML tramite CSS