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
Sfruttare lo streaming di una chiamata Http da Blazor
Creare un'applicazione React e configurare Tailwind CSS
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Migrare una service connection a workload identity federation in Azure DevOps
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Criptare la comunicazione con mTLS in Azure Container Apps
Generare file per il download da Blazor WebAssembly
Limitare le richieste lato server con l'interactive routing di Blazor 8
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework