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
Copiare automaticamente le secret tra più repository di GitHub
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Utilizzare i primary constructor in C#
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Creazione di componenti personalizzati in React.js con Tailwind CSS
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Generare token per autenicarsi sulle API di GitHub
Utilizzare Tailwind CSS all'interno di React: installazione