Quando si disegna una tabella, se la chiave primaria è un intero, si tende quasi sempre a renderla anche una identity così da delegare al database la creazione di un valore univoco. Tuttavia, quello della chiave primaria potrebbe non essere l'unico campo a beneficiare di una chiave autogenerata. Pensiamo al progressivo di una fattura o a un qualuqnue altro campo che deve essere univoco per regole di business; poiché non possiamo avere più di una colonna identity su una tabella, possiamo ricorrere a una sequence. Una sequence è un generatore di numeri che viene gestito dal database e garantisce la sequenzialità e l'univocità dei numeri generati.
Con Entity Framework Core possiamo configurare il mapping per fare in modo che la sequence inserisca un nuovo valore in un campo quando inseriamo un nuovo record.
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Invoice>() .Property(o => o.Number) .HasDefaultValueSql("NEXT VALUE FOR InvoiceNumber"); }
In questo caso specifichiamo che il valore di default del campo Number viene preso dal prossimo valore di una sequence chiamata InvoiceNumber. Prima di usare una sequence per questi scopi, va ricordato che, così come per l'identity, una volta che un numero è stato generato, questo non può essere riusato. Se l'inserimento non va a buon fine, il valore della sequence è perso lasciando così un buco. Per fare un esempio, se cerchiamo di inserire una fattura e la sequence genera il numero 10, in caso l'inserimento fallisca, al tentativo successivo la sequence genererà il numero 11. Se questi buchi nella numerazione non sono ammessi dalle regole di business, l'utilizzo di una sequence non è proponibile.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Limitare le richieste lato server con l'interactive routing di Blazor 8
Criptare la comunicazione con mTLS in Azure Container Apps
Sostituire la GitHub Action di login su private registry
Utilizzare gli snapshot con Azure File shares
Usare il versioning con i controller di ASP.NET Core Web API
Eseguire le GitHub Actions offline
Definire stili a livello di libreria in Angular
Specificare il versioning nel path degli URL in ASP.NET Web API
Eseguire una query su SQL Azure tramite un workflow di GitHub
Utilizzare Tailwind CSS all'interno di React: installazione
Disabilitare automaticamente un workflow di GitHub (parte 2)
Usare una container image come runner di GitHub Actions
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Disabilitare automaticamente un workflow di GitHub (parte 2)
- Paginare i risultati con QuickGrid in Blazor
- Ottimizzazione dei block template in Angular 17