2017-11-20 9 views
1

コードベースのアプローチを使用して学校ベースのアプリケーションを作成しようとしていますが、結果テーブルで "外部キー制約エラー"モデル最初のアプローチとその作業罰金と同じapplicaiton ...コードで最初に外部キー制約エラー...モデルファーストでうまく動作します

これはエラーイム

タイプの例外を取得して「System.Data.SqlClient.SqlException」は EntityFramework.dllで発生していますユーザーコードでは処理されませんでした。

フォーメーション:FOREIGN KEY制約の導入 テーブル 'FK_dbo.Semestersubjects_dbo.Semesters_semesterId' on 'Semestersubjects'は、サイクルまたは複数のカスケードパスを引き起こす可能性があります。 NO ACTIONまたはUP UP NO NO ACTIONを指定して を指定するか、他のFOREIGN KEY制約を変更してください。

制約またはインデックスを作成できませんでした。以前のエラーを参照してください。

は、これは私のコンテキストクラスは、コメントを述べてきたように、あなたがより良い答えをあなたのOnModelCreating方法を示すべきである

public class student 
    { 
     public student() 
     { 
      this.SemesterStudents = new HashSet<Semesterstudent>(); 
     } 

     public int id { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<Semesterstudent> SemesterStudents { get; set; } 
    } 
    public class Semester 
    { 
     public Semester() 
     { 
      this.SemesterStudents = new HashSet<Semesterstudent>(); 
      this.Semestersubjects = new HashSet<Semestersubject>(); 
     } 
     public int id { get; set; } 
     public string Name { get; set; } 
     ICollection<Semesterstudent> SemesterStudents { get; set; } 
     ICollection<Semestersubject> Semestersubjects { get; set; } 
    } 
    public class Semesterstudent 
    { 
     public Semesterstudent() 
     { 
      this.Results = new HashSet<Result>(); 
     } 
     public int id { get; set; } 
     public int studentId { get; set; } 
     public int semesterId { get; set; } 
     public virtual student students { get; set; } 
     public virtual Semester semesters { get; set; } 
     public virtual ICollection<Result> Results { get; set; } 
    } 
    public class Semestersubject 
    { 
     public Semestersubject() 
     { 
      this.Results = new HashSet<Result>(); 
     } 
     public int id { get; set; } 
     public int semesterId { get; set; } 
     public string Title { get; set; } 

     public virtual Semester semesters { get; set; } 
     public virtual ICollection<Result> Results { get; set; } 
    } 
    public class Result 
    { 
     public int id { get; set; } 
     public int SemesterstudentId { get; set; } 
     public int SemestersubjectId { get; set; } 
     public int Marks { get; set; } 
     public virtual Semesterstudent SemesterStudents { get; set; } 
     public virtual Semestersubject SemesterSubjects { get; set; } 
    } 
+0

OnModelCreatingメソッドを表示する必要があります。 – CodeNotFound

+0

私はonModelCreatingメソッドを使用していません... –

答えて

0

のように見えるものです。しかし、あなたのためのエラーメッセージを解読するには、deleteアクションに問題があると言います。カスケードしているということです(例えば、あるエンティティを削除しても関連するエンティティも削除します)。これに伴う問題は、あなたがSemesterSubjectを削除した場合、カスケードは、その後も、エラーmay cause cycles or multiple cascade paths

を引用する関連SemesterSubjectsを削除し、その後うSemesterSemester削除アクションを想定し、カスケードもある)を削除だろうということです繰り返しますが、OnModelCreatingを表示すると、エラーを修正する方法についてのより良い情報が得られますが、短い答えはOnDeleteの動作を変更するように外部キーを設定して、これがカスケードしないようにすることです。 (使用しているバージョンによって異なる場合があります)

builder.Entity<SemesterSubject>(entity => 
{ 
    entity.HasOne(e => e.semesters) 
     .WithMany(e => e.Semestersubjects) 
     .HasForeignKey(e => e.semesterId) 
     .OnDelete(DeleteBehavior.Restrict); 
}); 
+0

私はmvcに新しいので、本当に "onModelCreating"メソッドについて多くを知っている... –

関連する問題