我首先尝试使用EF6代码进行一对多自引用。我的实体看起来像这样
public class Menu
{
public int Id { get; set; }
public bool Target { get; set; }
public string Url { get; set; }
[DefaultValue(null)]
public int? ParentMenuId { get; set; }
public virtual Menu ParentMenu { get; set; }
public virtual List<Menu> ChildMenus { get; set; }
}
在我的上下文类中,我这样做是用WillCascadeOnDelete(true)进行自引用
modelBuilder.Entity<Menu>()
.HasOptional(c => c.ParentMenu)
.WithMany(c => c.ChildMenus)
.HasForeignKey(c => c.ParentMenuId)
.WillCascadeOnDelete(true);
但是当我在包管理器控制台中更新数据库时,它会给出错误
在表'菜单'上引入FOREIGN KEY约束'FK_dbo.Menus_dbo.Menus_ParentMenuId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束或索引。查看以前的错误。 enter image description here
答案 0 :(得分:1)
最后我发现在代码中没有任何方法第一个自引用实体Cascade Delete,我应该为级联删除编写递归函数