Specificare chi genera il valore di una proprietà in Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

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

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