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
.NET Conference Italia 2023
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Utilizzare gli snapshot con Azure File shares
Usare lo spread operator con i collection initializer in C#
Verificare la provenienza di un commit tramite le GitHub Actions
Evitare il flickering dei componenti nel prerender di Blazor 8
Implementare l'infinite scroll con QuickGrid in Blazor Server
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Reactive form tipizzati con modellazione del FormBuilder in Angular
Sostituire la GitHub Action di login su private registry
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Eseguire query verso tipi non mappati in Entity Framework Core
I più letti di oggi
- Creare un messaggio di posta in diversi formati con ASP.NET 2.0
- Caricare un DTO esposto da un servizio tramite una query LINQ to Entities in Entity Framework
- Utilizzare il metodo reduce in #javascript https://aspit.co/ccc di @morwalpiz
- Elencare gli utenti di un dominio NT con ADSI
- Utilizzare SQL e #linq per eseguire una query con #entityframework Core https://aspit.co/bfv di @sm15455 #efcore1
- Disponibile il codice sorgente di ASP.NET MVC
- Concludiamo in bellezza con Giancarlo Sudano di Microsoft: q# for quantum programming Siamo in live streaming da: https://aspit.co/netconf-22 #aspilive #netconfit
- Caricare i dati di configurazione allo startup di un'applicazione Angular
- rilasciati nuovi template per la #aspnet web pages. funzionano anche con #webmatrix: http://u.aspitalia.com/lu
- Creare automaticamente una pipeline YAML da una sua definizione in Azure DevOps