エンティティとして公開されている結合テーブルを使用して、多対多の関係を設定する場合はfollowed the docsです。EFコアの多対多リレーションシップで削除をモデル化するにはどうすればよいですか?
しかし、ドキュメントには削除について何をすべきかは言及されていません。
たとえば、Student
には多くの教師がおり、Teacher
には多くの生徒がいます。結合エンティティ/テーブルはStudentTeacher
です。
テーブル/エンティティに参加する:
public class StudentTeacher {
public int StudentId { get; set; }
public Student Student { get; set; }
public int TeacherId { get; set; }
public Teacher Teacher { get; set; }
}
結合テーブル/エンティティの設定:
modelBuilder.Entity<StudentTeacher>()
.HasOne(b => b.Teacher)
.WithMany(b => b.StudentTeachers)
.HasForeignKey(b => b.TeacherId)
.IsRequired()
.OnDelete(/* ... what goes here? ...*/);
modelBuilder.Entity<StudentTeacher>()
.HasOne(b => b.Student)
.WithMany(b => b.StudentTeachers)
.HasForeignKey(b => b.StudentId)
.IsRequired()
.OnDelete(/* ... what goes here? ...*/);
私はOnDelete()
に何を使うのですか?なぜ?あまりにも(Cascade
)を削除したり、禁止し、エラーをスロー:
はい、あなたは正しいです。これは私が私の関係テーブルのほとんどをしたものです。私はdb側の関係を削除したくないのはどうですか?私はいくつかの重要な関係を記録またはアーカイブする必要があります。この教師の生徒の例では、これは必要ではありませんが、私はそのような状況があります。あなたは何をやって何を提案しますか? @grokky – kizilsu
@kizilsu私は、最も簡単なのは、データベースにトリガを設定し、そのように監査ログを作成すると仮定します。または、EFでマップし、削除するたびにエントリを作成します。 – grokky