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
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Creare agenti facilmente con Azure AI Agent Service
Filtering sulle colonne in una QuickGrid di Blazor
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Utilizzare WhenEach per processare i risultati di una lista di task
.NET Aspire per applicazioni distribuite
Combinare Container Queries e Media Queries
Configurare lo startup di applicazioni server e client con .NET Aspire
Eliminare una project wiki di Azure DevOps
Escludere alcuni file da GitHub Secret Scanning
Utilizzare Copilot con Azure Cosmos DB
Utilizzare Hybrid Cache in .NET 9
I più letti di oggi
- .NET Conference Italia 2024 - Milano
- Develop and distribute Azure Functions using K8s and CI/CD
- Disponibile la versione finale di Hyper-V: la virtualizzazione per Windows Server 2008
- Speciale Mastering Entity Framework
- Velocity arriva alla CTP3
- Silverlight Summer: un'estate speciale piena di Style per i controlli Silverlight!
- Disponibile la versione beta di Silverlight 4.0
- Mono 0.13: ora anche web services
- .NET Alerts Software Development Kit