EFコードファーストモデルを使用しています。私は3つのテーブルを持っていますTeacher
、Student
そしてAddress
。各教師と生徒は複数のアドレスを持つことができるため、との間の関連付けTeacher_Address
はStudent_Address
1対多です。
このために私は書いた:
public class Teacher
{
public int Id;
public virtual List<Address> Addresses { get; set; }
}
public class Student
{
public int Id;
public virtual List<Address> Addresses { get; set; }
}
public class Address
{
public int Id;
public int? TeacherId { get; set; }
public virtual Teacher Teacher { get; set; }
public int? StudentId { get; set; }
public virtual Student Student { get; set; }
}
流暢なAPI:
//Creating 1 to * relationships b\w Teacher and Address
modelBuilder.Entity<Address>().HasOptional(p => p.Teacher)
.WithMany(p => p.Addresses)
.HasForeignKey(p => p.TeacherId)
.WillCascadeOnDelete();
//creating 1 to * replationship b\w Student and Address
modelBuilder.Entity<Address>().HasOptional(p => p.Student)
.WithMany(p => p.Addresses)
.HasForeignKey(p => p.StudentId)
.WillCascadeOnDelete();
Teacher
のデータをStudent
問題なく挿入できますが、いずれかの行を削除しようとするTeacher
とStudent
、次の例外が表示されます。
DELETEステートメントがREFERENCE制約「FK_dbo.Address_dbo.Teacher_TeacherId」と競合していました。データベース「CodeFirst.TestContext」、テーブル「dbo.Address」、列「TeacherId」で競合が発生しました。
誰かがこの問題を解決する方法と私が間違っていることを教えてもらえますか?