Возможная причина, по которой вы не получаете каскадное удаление, заключается в том, что ваши отношения не являются обязательными.Пример:
public class Category
{
public int CategoryId { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public Category Category { get; set; }
}
В этой модели вы получите таблицу Product, которая имеет внешний ключ к таблице Category, но этот ключ может иметь значение null, и по умолчанию в базе данных отсутствует установка каскадного удаления.
Если вы хотите, чтобы связь была обязательной, у вас есть две опции:
Аннотации:
public class Product
{
public int ProductId { get; set; }
[Required]
public Category Category { get; set; }
}
Свободный API:
modelBuilder.Entity<Product>()
.HasRequired(p => p.Category)
.WithMany();
В обоих случаях каскадированиеудаление будет настроено автоматически.
Если вы хотите, чтобы отношение было необязательным, но с каскадным удалением , вам необходимо настроить это явно:
modelBuilder.Entity<Product>()
.HasOptional(p => p.Category)
.WithMany()
.WillCascadeOnDelete(true);
Редактировать: ВПоследний фрагмент кода вы также можете просто написать .WillCascadeOnDelete()
.Эта перегрузка без параметров по умолчанию равна true
для настройки каскадного удаления.
Подробнее об этом см. В документации