Quando si gestisce la concorrenza ottimistica con SQL Server, il modo più semplice per creare la colonna con la versione è crearla di tipo Timestamp così che ad ogni aggiornamento sia SQL Server a cambiare la versione. Per default, la proprietà che mappa sul timestamp è di tipo byte[], ma questo comportamento non è sempre ottimale per due motivi. Il primo è che byte[] è un tipo mutabile, il secondo è che un byte[] serializzato è poco comprensibile all'occhio umano e quindi rende il debug più difficile a volte. Per questi motivi, è stata aggiunta la possibilità di mappare la colonna che fa da rowversion non solo con una proprietà di tipo byte[], ma anche di tipo long. Per fare questo, dobbiamo dichiarare la proprietà dell'entity come long o ulong e nel mapping specificare che il valore della proprietà viene generato convertendo da byte[].
public partial class Person
{
public int Id { get; set; }
public string Name { get; set; }
public long Timestamp { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Customers>(entity =>
{
entity.Property(e => e.Timestamp)
.IsRowVersion()
.HasConversion<byte[]>()
.IsConcurrencyToken();
});
}Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Recuperare gli audit log in Azure DevOps
La gestione della riconnessione al server di Blazor in .NET 9
Raggruppare risorse in .NET Aspire
Implementare il throttle in JavaScript
Loggare le query più lente con Entity Framework
Eliminare record doppi in Sql Server
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Configurare lo startup di applicazioni server e client con .NET Aspire
Gestire progetti NPM in .NET Aspire
Gestire progetti .NET + React in .NET Aspire
Scrivere selettori CSS più semplici ed efficienti con :is()
Recuperare le subissue e il loro stato di completamento in GitHub


