Gestire liste di tipi semplici con Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi