私はここで二つのモデル持っている:ユーザー(学生が)他の人に評価を与えることができます。この設計ではなぜEntity Frameworkでカスケード削除をオフにする必要がありますか?
public class Student
{
[Key]
public Guid Id { get; set; }
public ApplicationUser User { get; set; }
[Display(Name = "Name"), Required]
public string Name { get; set; }
public ICollection<Assessment> SentAssessment { get; set; }
public ICollection<Assessment> ReceivedAssessment { get; set; }
}
public class Assessment
{
[Key]
public Guid Id { get; set; }
public Student Source { get; set; }
public Student Target { get; set; }
[Display(Name = "Assessment Content")]
public string Content { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Assessment>()
.HasRequired(eval => eval.Source)
.WithMany(stu => stu.SentAssessment)
.Map(conf => conf.MapKey("SourceId"))
.WillCascadeOnDelete();
modelBuilder.Entity<Assessment>()
.HasRequired(eval => eval.Target)
.WithMany(stu => stu.ReceivedAssessment)
.Map(conf => conf.MapKey("TargetId"))
.WillCascadeOnDelete();
}
を。彼または彼女は、彼/彼女が他人に与えた評価と他から受け取った評価の両方を見ることができます。
学生を削除する際に、査読を送信または受信したすべての人物を削除する必要があります。だから私はWillCascadeOnDelete文を書いたが、私はエラーを取得:
「サイクルまたは複数のカスケードパスが」ここにいるIntroducing FOREIGN KEY constraint 'FK_dbo.Evaluations_dbo.Students_TargetId' on table 'Evaluations' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
?
'base.OnModelCreating ...'の下の 'modelBuilder.Conventions.Remove();'はどうですか? –
Hackerman