Я использую первую модель EF. У меня есть 3 таблицы Teacher
, Student
и Address
. Каждый учитель и ученик может иметь несколько адресов, поэтому связь между Teacher_Address
и Student_Address
составляет 1 для многих.Оператор DELETE противоречил ограничению REFERENCE в sql?
Для этого я написал:
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».
Может кто-нибудь, пожалуйста, скажите мне, как решить эту проблему и что я делаю неправильно?