Una delle nuove funzionalità introdotte in Entity Framework Core rispetto a Entity Framework 6 è la possibilità di gestire il vincolo Cascade Delete. Se in fase di mapping impostiamo il vincolo di Cascade Delete tra due oggetti, quando cancelliamo il padre Entity Framework Core cerca di cancellare tutti i figli caricati nel contesto. Questo viene fatto inviando un comando di DELETE al database per ogni oggetto figlio caricato nel contest e poi per l'oggetto padre. Ne consegue che se non tutti i figli sono caricati nel contesto la cancellazione fallisce perchè alcuni figli non sono stati rimossi dal database prima di rimuovere il padre. Per ovviare a questo problema dobbiamo specificare il vincolo di Cascade Delete anche sul database. Una volta specificato questo vincolo non abbiamo la necessità di caricare i figli nel contesto prima di cancellare il padre in quanto sarà il database automaticamente a rimuovere i figli quando cancella il padre.
In questo primo esempio vediamo come impostare il Cascade Delete.
modelBuilder.Entity<Order>() .HasMany(b => b.Details) .WithOne(b => b.Order) .OnDelete(DeleteBehavior.Cascade);
In questo secondo esempio vediamo come cancellare un ordine. Nel primo caso non c'è il vincolo di Cascade Delete sul database quindi carichiamo tutti i dettagli così che possano essere cancellati. Nel secondo caso c'è il vincolo sul database quindi carichiamo solo l'ordine.
using (var db = new OrderContext()) { var order = db.Orders.Include(b => b.Details).First(); db.Remove(order); db.SaveChanges(); } using (var db = new OrderContext()) { var order = db.Orders.First(); db.Remove(order); db.SaveChanges(); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Limitare le richieste lato server con l'interactive routing di Blazor 8
.NET Conference Italia 2023
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
C# 12: Cosa c'è di nuovo e interessante
Evitare la command injection in un workflow di GitHub
Creare un'applicazione React e configurare Tailwind CSS
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Miglioramenti agli screen reader e al contrasto in Angular
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
Gestire i null nelle reactive form tipizzate di Angular
I più letti di oggi
- Elencare gli utenti di un dominio NT con ADSI
- Creare un messaggio di posta in diversi formati con ASP.NET 2.0
- Utilizzare SQL e #linq per eseguire una query con #entityframework Core https://aspit.co/bfv di @sm15455 #efcore1
- Utilizzare il metodo reduce in #javascript https://aspit.co/ccc di @morwalpiz
- Disponibile il codice sorgente di ASP.NET MVC
- rilasciati nuovi template per la #aspnet web pages. funzionano anche con #webmatrix: http://u.aspitalia.com/lu