Quando lavoriamo con un'entity non siamo sempre noi a decidere il valore di tutte le sue proprietà. A volte infatti è il database a decidere il valore di una proprietà nel momento in cui l'entity viene persistita. Un tipico esempio di quando il database decide il valore di una proprietà è nel caso delle colonne di tipo identity o nel caso di colonne aggiornate con un trigger.
In questi casi possiamo istruire Entity Framework Core per recuperare queste proprietà dal database una volta generate. Per fare questo abbiamo a disposizione l'attributo DatabaseGenerated a cui passiamo l'enum DatabaseGeneratedOption. Questo enum ha i seguenti valori:
- Identity: il valore viene generato dal database in fase di insert
- Computed:il valore viene generato dal database sia in fase di insert che di update
- None: il valore viene deciso dal codice (default)
Il prossimo esempio mostra come utilizzare l'attributo.
public class Person { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string FullName { get; set; } [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime LastUpdated { get; set; } }
In alternativa all'utilizzo delle data annotation possiamo usare il codice tramite i seguenti metodi:
- ValueGeneratedOnAdd: equivalente a Identity
- ValueGeneratedOnAddOrUpdate: equivalente a Computed
- ValueGeneratedNever: equivalente a None
class MyContext : DbContext { public DbSet<Person> People { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Person>() .Property(b => b.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity<Person>() .Property(b => b.LastUpdated) .ValueGeneratedOnAddOrUpdate(); } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Usare lo spread operator con i collection initializer in C#
Creazione di componenti personalizzati in React.js con Tailwind CSS
Usare le collection expression per inizializzare una lista di oggetti in C#
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Utilizzare politiche di resiliency con Azure Container App
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Potenziare Azure AI Search con la ricerca vettoriale
Sfruttare al massimo i topic space di Event Grid MQTT
Aggiungere interattività lato server in Blazor 8
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
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
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)