Quando dobbiamo creare una tabella e optiamo per l'uso di chiavi surrogate, la scelta del tipo del campo chiave è tra un valore autoincrementale generato dalla tabella nel database (campo identity) o un valore conosciuto già prima della insert (Guid o sequence). Uno dei motivi per utilizzare una chiave di cui si conosce il valore prima della INSERT è la necessità di utilizzare l'id anche in altre tabelle come quelle di auditing o altro (ad esempio come nel caso in cui un dettaglio dell'ordine ha bisogno dell'id dell'ordine).
Sebbene questa funzionalità sia raggiungibile anche con un id generato dal database, richiede diversi passaggi. Prendendo come esempio l'nserimento di un ordine e dei suoi dettaglio, dobbiamo inserire l'ordine sul database, recuperare l'id generato, usarlo nell'inserimento dei dettagli. EF permette di ottimizzare il processo con una semplice tecnica: invece di usare un campo identity, l'id viene generato da una sequence. EF legge dalla sequence un set di valori (10 di default) e li usa per ogni insert. Per fare un esempio, se dobbiamo inserire tre ordini, EF Core legge 10 valori dalla sequence, ne usa tre per le insert e tiene gli altri sette in cache. Se poi dobbiamo inserire altri cinque ordini, vengono usati cinque dei sette valori rimasti dalla precedente operazione senza la necessità di accedere al database.
Grazie a questa tecnica, il client conosce gli id prima delle insert e genera codice SQL che effettua le insert di ordini e dettagli in un solo comando ottimizzando il colloquio con il database. Per abilitare questa funzionalità, si deve chiamare il metodo UseHiLo sulla proprietà che rappresenta l'id in fase di mapping.
modelBuilder.Entity<Person>().Property(e => e.Id).UseHiLo();
Se usiamo le migrazioni per generare il database, EF si occupa di generare la sequence per noi, altrimenti dovremo generarla con uno script SQL. Nel prossimo script vedremo come customizzare alcuni parametri come il nome della sequence o il numero di valori che EF core estrae da essa.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare QuickGrid di Blazor con Entity Framework
Gestione dell'annidamento delle regole dei layer in CSS
Configurare e gestire sidecar container in Azure App Service
Combinare Container Queries e Media Queries
Il nuovo controllo Range di Blazor 9
Ordinare randomicamente una lista in C#
Testare l'invio dei messaggi con Event Hubs Data Explorer
Creare una libreria CSS universale: i bottoni
Utilizzare Azure AI Studio per testare i modelli AI
Change tracking e composition in Entity Framework
Gestione degli stili CSS con le regole @layer
I più letti di oggi
- Ricevere un web hook con le Logic App di Azure
- Routing HTTP con i proxy delle Azure Function
- Gestione dei sottotitoli con il tag video di HTML5
- Applicare una rotazione con i CSS alle glyph di Bootstrap
- Restituire un file per il download tramite ASP.NET Web API
- Auto scale delle Azure Web App con Application Insights
- Impostare il tema light o dark utilizzando i CSS