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
Ridurre il reflow ottimizzando il CSS
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Gestione file Javascript in Blazor con .NET 9
Utilizzare l nesting nativo dei CSS
Integrare SQL Server in un progetto .NET Aspire
Ottenere un token di accesso per una GitHub App
Utilizzare Containers in .NET Aspire
Esporre un server MCP esistente con Azure API Management
Evitare memory leaks nelle closure JavaScript
Utilizzare una qualunque lista per i parametri di tipo params in C#
Eseguire script pre e post esecuzione di un workflow di GitHub
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
I più letti di oggi
- Analizzare il contenuto di una issue con GitHub Models e AI
- Integrare OpenAI tramite Aspire
- Visualizzare un template per browser mobile tramite un custom control ASP.NET
- Visualizzare l'errore esteso di ASP.NET in base all'indirizzo IP di connessione
- Interagire con Azure DevOps tramite MCP Server
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Ottimizzare il codice #javascript con i Shorthand #patterns - terza parte https://aspit.co/ca7 di @morwalpiz
- Creare un agente A2Acon Azure Logic Apps
- Usare il RoleManager per gestire i ruoli con ASP.NET Identity