Una delle funzionalità di EF Core presenti sin dalla prima versione, è la capacità di recuperare l'id appena inserito da una insert effettuata su una tabella che ha la chiave impostata come identity. Infatti, senza che noi facciamo nulla, dopo aver invocato il metodo SaveChanges, le entity appena inserite e con chiave identity hanno l'id popolato. Quando usiamo Sql Server, il modo in cui EF Core effettua questo recupero è funzionante, ma inefficiente. Per ottimizzare questo processo, EF 7 utilizza un codice SQL diverso dalle versioni precedenti, ma più efficiente.
Tuttavia, questo nuovo codice SQL ha problemi quando alla tabella sono collegati dei trigger. Per questo motivo, la classe TableBuilder è stata arricchita con il metodo HasTrigger. Se mappiamo l'entity usando questo metodo, EF utilizza il vecchio modo di recuperare l'id appena inserito, altrimenti EF utilizza il nuovo modo.
class MyContext : DbContext { public DbSet<Customer> Customers { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Customer>(e => { e.ToTable(tb => tb.HasTrigger(?MyTrigger?)) }); } }
Dobbiamo tenere presente che questa nuova funzionalità introduce una breaking change. Se abbiamo un progetto con una versione di EF Core fino alla 6, con tabelle che hanno identity e trigger, nel momento in cui migriamo a EF 7, il codice comincierà a generare eccezioni in fase di insert in quanto verrà usato il nuovo metodo di recuperare il valore generato dal database. Per ripristinare il funzionamento corretto, dovremo aggiungere la chiamata a HasTrigger per le tabelle interessate.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eliminare record doppi in Sql Server
Utilizzare una qualunque lista per i parametri di tipo params in C#
Gestione degli eventi nei Web component HTML
Rendere le variabili read-only in una pipeline di Azure DevOps
Combinare Container Queries e Media Queries
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Generare una User Delegation SAS in .NET per Azure Blob Storage
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Ottenere un token di accesso per una GitHub App
.NET Conference Italia 2024
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
I più letti di oggi
- Disponibile la release finale di Moonlight 1.0
- domani su @aspitalia troverete un articolo speciale dedicato a Windows Phone 8: non ... https://aspit.co/wp-summit #WPSummit
- vuoi costruire applicazioni web in real time? non perdere il nostro speciale! https://aspit.co/aln #signalr #websockets #polling #aspnet
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare l'access modifier private protected in C# 7.2