2016-05-20 6 views
0

私はここで二つのモデル持っている:ユーザー(学生が)他の人に評価を与えることができます。この設計ではなぜ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.

「サイクルまたは複数のカスケードパスが」ここにいる

+0

'base.OnModelCreating ...'の下の 'modelBuilder.Conventions.Remove ();'はどうですか? – Hackerman

答えて

0

これは、Studentデータベースでカスケード削除が発生した場合、どの順序で削除する必要があるかわからないからです。Assessmentです。

create trigger T_Student_D 
on Student 
instead of delete 
as 
    set nocount on 
    delete from Assessment 
    where TargetId in (select ID from deleted) or 
    SourceId in (select ID from deleted) 

    delete from Student where ID in (select ID from deleted) 

同じエンティティを参照する複数の外部キーにはよくある問題があります。

関連する問題