我有相互关联的基本递归类别。当我尝试删除一个有孩子的类别时,我得到了你通常的错误。
我一直做的是创建一个函数来递归删除所有孩子,但我想知道我是否可以以某种方式将CASCADE ON DELETE设置为使用 EF 的 POCO 类,这样我就不需要实现自己的删除机制?
错误
DELETE 语句与 SAME TABLE REFERENCE 约束“FK_dbo.Categories_dbo.Categories_RootCategoryId”冲突。冲突发生在数据库“网站”、表“dbo.Categories”、“RootCategoryId”列中。
模型
public class Category
{
public int Id { get; set; }
public int? RootCategoryId { get; set; }
public virtual Category RootCategory { get; set; }
public virtual ICollection<Category> ChildCategories { get; set; }
}
我现在拥有的
目前我在删除类别之前删除关系。但是如果我想递归地删除所有子类别怎么办?只有级联它们才能做到这一点。
public ActionResult Delete(int id)
{
var category = _db.Categories.Single(x => x.Id == id);
if (category.RootCategoryId == null)
{
category.ChildCategories.ToList().ForEach(x => x.RootCategoryId = null);
}
else
{
category.ChildCategories.ToList().ForEach(x => x.RootCategoryId = category.RootCategoryId);
}
_db.Categories.Remove(category);
_db.SaveChanges();
return RedirectToAction("Index", "Category");
}