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
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Creare un webhook in Azure DevOps
Generare la software bill of material (SBOM) in GitHub
Ordinare randomicamente una lista in C#
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Loggare le query più lente con Entity Framework
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
.NET Conference Italia 2024
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Utilizzare QuickGrid di Blazor con Entity Framework
I più letti di oggi
- #lightswitch 2012 supporta nativamente #html5, #jquery e #jquerymobile. è stato mostrato girare su #ipad a #msteched
- 6 giorni al lancio di #netfx4 e #vs10ita. segui il nostro speciale su http://u.aspitalia.com/gh
- Una preview della prossima versione di #VisualStudio con cui creare #metrostyle app http://aspitalia.com/build-win8 #BldWin
- #vs14 ctp2 è disponibile come VM in #azure o per il download. supporto per il touch e tutte novità su https://aspit.co/awc
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- #IE10 disponibile al download da subito: http://aspitalia.com/vf http://aspitalia.com/mix-11 #mix11
- Viene mostrata la nuova start screen di Windows Phone 8 https://aspit.co/wp-summit #WPSummit