级联删除与同一实体的一对多关系

时间:2018-04-06 07:14:13

标签: c# entity-framework ef-fluent-api

我有一个评论实体,其中新评论没有父评论,但是评论列表也是必填父评论。

用户可以创建评论,然后其他用户可以回复该评论,该评论将是所有这些回复的父级,并且回复也可以对每个回复的父评论进行进一步回复。

如何级联删除每条评论的回复,以便在删除评论或回复评论时自动删除所有回复及其进一步回复。

以下是评论模型:

public class Comment
{
    public Comment()
    {
        Replies = new List<Comment>();
    }
    [Required]
    public int CommentId { get; set; }

    public ApplicationUser User { get; set; }
    [Required]
    public DateTime Datetime { get; set; }      
    [Required]
    public string Audio { get; set; }

    public Post Post { get; set; }

    [JsonIgnore]
    public List<Comment> Replies { get; set; }

    public Comment Parent { get; set; }
}

以下是我使用Fluent API尝试的内容

modelBuilder.Entity<Comment>().
            HasMany(s => s.Replies).
            WithRequired(s => s.Parent).
            WillCascadeOnDelete(true);

会引发以下错误

  

引入FOREIGN KEY约束   &#39; FK_dbo.Comments_dbo.Comments_Parent_CommentId&#39;在桌子上&#39;评论&#39;   可能会导致循环或多个级联路径。指定ON DELETE NO   ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY   限制。无法创建约束或索引。见前   错误。

1 个答案:

答案 0 :(得分:0)

您必须更改为SQL表,如

  

ALTER TABLE注释ADD CONSTRAINT   FK_dbo.Comments_dbo.Comments_Parent_CommentId FOREIGN KEY(CommentId)   参考文献T1(CommentId)
   ON DELETE CASCADE;

最后一个粗体部分是关键。