DEV Community

Ignacy Starczynski
Ignacy Starczynski

Posted on

Cascading deletion and configuration in Entity Framework 🔥

Cascading deletion is a mechanism that allows you to delete a parent unit, causing all dependent units to be automatically deleted. This is useful in situations where a dependent entity cannot exist without a parent entity.

In Entity Framework, cascading deletion is configured using the DeleteBehavior property of the relationship between entities. It can take the following values:


  1. Cascade - the dependent unit will be deleted automatically when the parent unit is deleted.

  2. Restrict - removing the parent unit will throw an exception if the dependent unit is still existing.

  3. NoAction - deleting the parent entity will have no effect on the dependent entity.

  4. SetNull - the foreign key of the dependent unit will be set to null when the parent unit is deleted.


Here are the steps to configure cascading delete in Entity Framework:

⚡️ Model Definition:

Ensure that your data models (classes representing entities) have the appropriate attributes and configurations that define the relationships between them. For example, you can use the ForeignKey or InverseProperty attributes to specify relationships between entities.


public class Parent
{
    public int ParentId { get; set; }
    public string Name { get; set; }
    public ICollection<Child> Children { get; set; }
}

public class Child
{
    public int ChildId { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Parent Parent { get; set; }
}

Enter fullscreen mode Exit fullscreen mode

✨ Fluent API Configuration:

If you are using Fluent API, you can define cascading delete in the OnModelCreating method in your DbContext class. Here's an example of cascading delete:


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Parent>()
        .HasMany(p => p.Children)
        .WithOne(c => c.Parent)
        .HasForeignKey(c => c.ParentId)
        .OnDelete(DeleteBehavior.Cascade);
}


Enter fullscreen mode Exit fullscreen mode

In the above example, OnDelete(DeleteBehavior.Cascade) specifies that deleting a parent record will also result in the deletion of all its children.


🍂 Database Update:

After defining the relationships and cascading delete, you need to update your database. You can use EF Core migrations to automatically apply these changes to the database.


add-migration Init

Enter fullscreen mode Exit fullscreen mode

update-database

Enter fullscreen mode Exit fullscreen mode

Now, when you delete a parent record, all the related child records will be automatically deleted from the database.

Remember that cascading delete has consequences, so use it carefully. Make sure you understand which records will be deleted before using it to avoid data loss. 🌱

Top comments (0)