C# 使用EF CodeFirst级联删除(可能为空)集合

C# 使用EF CodeFirst级联删除(可能为空)集合,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我有这门课: public class Participant { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required] public virtual PersonName Name { get; set; } public virtual ICollection<ResponseSet> SurveyRe

我有这门课:

public class Participant
  {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    public virtual PersonName Name { get; set; }

    public virtual ICollection<ResponseSet> SurveyResponses { get; set; }
  }
公共课堂参与者
{
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
[必需]
公共虚拟人名名称{get;set;}
公共虚拟ICollection SurveyResponses{get;set;}
}
当参与者第一次被创建时,不会有任何调查响应(因此我不认为答案是需要这个集合)。但是,如果我删除了参与者,我希望对SurveyResponses中的所有响应集进行级联删除。我将此添加到我的DbContext中:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Participant>()
                    .HasOptional(d=>d.SurveyResponses)
                    .WithMany()
                    .WillCascadeOnDelete();
      }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.has可选(d=>d.SurveyResponses)
.有很多
.WillCascadeOnDelete();
}
但这不太管用。是的,它创建了级联删除。但它只是在参与者表上添加了一个SurveyResponses_Id FK。除非我遗漏了一些我不想做的事情,因为参与者在集合中可以有多个响应集


不幸的是,我已经找到了很多关于这个问题的答案,但似乎没有一个是关于收集的。

首先,个人和回应调查之间的关系是1:n。因为person的外键必须在Response survey表中。集合调查响应只是一个导航属性,在数据库中没有真正的列表示形式

modelBuilder.Entity<ResponseSet>()
        .HasRequired(s =>s.Participant)
        .WithMany(s =>s.SurveyResponses)
        .Map(s =>s.MapKey("ParticipantId"))
        .WillCascadeOnDelete(true);
modelBuilder.Entity()
.HasRequired(s=>s.Participant)
.有许多(s=>s.SurveyResponses)
.Map(s=>s.MapKey(“ParticipantId”))
.WillCascadeOnDelete(真);

嗯,它不起作用。我需要重组我的类来实现这一点吗?你能写下你的POCO来帮助你吗?(你也在写参与者模型生成器吗?不要那样做)不,这是我对Fluent API的唯一使用。ResponseSet类是否需要以某种方式引用参与者?现在不行。是的,因为一个回答需要一个参与者(这就是我的答案中所要求的),好的,好的。我所做的(在添加OnModelCreate之前)构建了正确的关联,除了可以为null和没有级联之外。