Molto spesso, nel nostro modello ci capita di avere una classe con una proprietà che rappresenta una lista di oggetti collegati. Per fare un esempio concreto, capita spesso di avere una classe Person con una lista di numeri di telefono collegati. Tipicamente, in casi come questi si crea una tabella per la classe person e una tabella per memorizzare gli indirizzi collegati alla persona.
Tuttavia, possiamo anche scegliere di persistere i numeri di telefono serializzandoli in JSON e memorizzandoli poi in una colonna della tabella mappata sulla classe Person. Supponiamo di avere la classe Person così dichiarata:
public class Person { public int Id { get; set; } public string Name { get; set; } public List<string> Phones { get; set; } }
In questo caso, non possiamo mappare la proprietà Phones verso una tabella esterna in quanto è una lista di stringhe. Per persistere questo campo dobbiamo mapparlo verso una colonna della tabella PErson serializzandolo in JSON con il seguente mapping.
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Person>(entity => { entity.Property(e => e.Phones) .HasConversion( value => JsonConvert.SerializeObject(value), value => JsonConvert.DeserializeObject<T>(value) ); } }
Il metodo HasConversion, applicato alla proprietà Phones, accetta due metodi. Il primo è quello che serializza il valore della proprietà (in formato JSON) in fase di salvataggio , il secondo è quello che prende il json dalla colonna e lo deserializza nell'oggetto .NET.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire domini wildcard in Azure Container Apps
Short-circuiting della Pipeline in ASP.NET Core
Sfruttare al massimo i topic space di Event Grid MQTT
Ottimizzazione dei block template in Angular 17
Inizializzare i container in Azure Container Apps
Creare moduli CSS in React
Eseguire query verso tipi non mappati in Entity Framework Core
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Eseguire attività pianificate con Azure Container Jobs
Utilizzare politiche di resiliency con Azure Container App
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Routing statico e PreRendering in una Blazor Web App
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Disabilitare automaticamente un workflow di GitHub (parte 2)
- Ottimizzazione dei block template in Angular 17
- Paginare i risultati con QuickGrid in Blazor