Enabling Cascade Delete in EF Core Code First DB Using the Fluent API

less than 1 minute read

Entity Framework Core Default Behaviour on Delete

Cascade delete saves a developer time by not needing to write boilerplate code for related data when the parent data in the relationship has been deleted. However in Entity Framework Core it is not the default behaviour. It takes a more conservative view and sets the on delete behaviour to restrict (StackOverflow Question where EF Core Team Member Confirms)_ _which the documentation defines as:

Restrict: The delete operation is not applied to dependent entities. The dependent entities remain unchanged. - EF Core Documentation

Compared with the definition of cascade:

Cascade: Dependent entities are also deleted. - EF Core Documentation

Enabling Cascade Delete Using The Fluent API

If you have created your database using Code First then the fix is simple. When defining your relationships tell EF that you want the delete action to be a cascade one. This needs the use of an additional using Microsoft.Data.Entity.Metadata _which contains _DeleteBehaviour:

using Microsoft.Data.Entity;
using Microsoft.Data.Entity.Metadata;

public class MyDBContext : DBContext
{
    public DbSet<Blog> Blog { get; set; }
    public DbSet<Post> Posts { get; set; }
    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
        .HasOne(p => p.Blog)
        .WithMany(b => b.Posts)
        .OnDelete(DeleteBehavior.Cascade);
    }
}

Updated: