Gestire la concorrenza ottimistica in Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

In molte applicazione abbiamo la necessità di gestire la concorrenza sui dati per evitare che due utenti possano modificare lo stesso dato nello stesso momento. Entity Framework Core gestisce nativamente la concorrenza in modalità ottimistica ovvero utilizzando un campo che stabilisce il numero di versione della riga e che viene aggiornato a ogni inserimento o modifica.
Per stabilire quale campo della tabella deve agire da numero di versione, basta usare il metodo IsConcurrencyToken in fase di mapping sulla proprietà che mappa il campo.

public class PeopleContext : DbContext
{
  public DbSet<Person> People { get; set; }

  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Person>()
      .Property(p => p.Version)
      .ValueGeneratedOnAddOrUpdate()
      .IsConcurrencyToken();
  }
}

public class Person
{
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public byte[] Version { get; set; }
}

Il metodo ValueGeneratedOnAddOrUpdate garantisce che Entity Framework non intacchi il valore della proprietà ma lo prenda sempre dal database e il metodo IsConcurrencyToken garantisce che la proprietà versione sia sempre presente nella clausola Where insieme al'ID nelle cancellazioni e negli aggiornamenti.

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