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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Copiare automaticamente le secret tra più repository di GitHub
Miglioramenti nell'accessibilità con Angular CDK
Eseguire una query su SQL Azure tramite un workflow di GitHub
Effettuare delete massive con Entity Framework Core 7
Usare lo spread operator con i collection initializer in C#
Usare le collection expression per inizializzare una lista di oggetti in C#
Eseguire query verso tipi non mappati in Entity Framework Core
Usare una container image come runner di GitHub Actions
Semplificare il deployment di siti statici con Azure Static Web App
Limitare le richieste lato server con l'interactive routing di Blazor 8
Utilizzare il trigger SQL con le Azure Function