我有这堂课:
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; }
}
首次创建参与者时,不会有任何调查回复(因此我认为答案不是要求此收集)。但是,如果删除参与者,我想在SurveyResponses中对所有ResponeSets进行级联删除。我把它添加到我的DbContext:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Participant>()
.HasOptional(d=>d.SurveyResponses)
.WithMany()
.WillCascadeOnDelete();
}
但这不太有用。是的,它创建了级联删除。但它只是在Participants表上添加了SurveyResponses_Id FK。除非我遗漏了一些不是我想要做的事情,因为参与者可以在集合中拥有多个ResponseSet。
不幸的是,我已经找到了很多这个问题的答案,但它们似乎都没有处理过这些问题。
答案 0 :(得分:1)
首先,人与响应调查之间的关系是1:n。因为人的外键必须在Response调查表中。集合调查响应只是一个导航属性,并且在数据库中没有真正的列表示。
modelBuilder.Entity<ResponseSet>()
.HasRequired(s =>s.Participant)
.WithMany(s =>s.SurveyResponses)
.Map(s =>s.MapKey("ParticipantId"))
.WillCascadeOnDelete(true);