удалить при каскадном предотвращении круговой ссылки между строками/объектами

#c# #entity-framework-core #many-to-many #circular-reference #cascading-deletes

Вопрос:

 public class Course {  public decimal Id { get; set; }  public decimal IdState { get; set; }  public decimal IdCity { get; set; }  public string Name { get; set; }  public Listlt;CourseStudentgt; CourseStudents { get; set; } = new Listlt;CourseStudentgt;(); }  public class Student {  public decimal Id { get; set; }  public decimal IdState { get; set; }  public decimal IdCity { get; set; }  public string Name { get; set; } }  

Промежуточная сущность с отношением

 public class CourseStudent {  public decimal Id { get; set; }  public decimal IdState { get; set; }  public decimal IdCity { get; set; }  public decimal IdCourse { get; set; }  public decimal IdStudent { get; set; }  public Student Student { get; set; } }  

Мои конфигурации:

 public class CourseConfiguration : IEntityTypeConfigurationlt;Coursegt; {  public void Configure(EntityTypeBuilderlt;Coursegt; builder)  {  builder.ToTable("Courses");  builder.Property(x =gt; x.IdState).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.IdCity).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.Name).HasColumnType("varchar(64)").IsRequired();  } }  public class StudentConfiguration : IEntityTypeConfigurationlt;Studentgt; {  public void Configure(EntityTypeBuilderlt;Studentgt; builder)  {  builder.ToTable("Students");  builder.Property(x =gt; x.IdState).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.IdCity).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.Name).HasColumnType("varchar(64)").IsRequired();  } }   public class CourseStudentConfiguration : IEntityTypeConfigurationlt;CourseStudentgt; {  public void Configure(EntityTypeBuilderlt;CourseStudentgt; builder)  {  builder.ToTable("Courses_Students");  builder.Property(x =gt; x.IdState).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.IdCity).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.IdCourse).HasColumnType("numeric(18,0)").IsRequired();  builder.Property(x =gt; x.IdStudent).HasColumnType("numeric(18,0)").IsRequired();  } }  

Мне нужно предотвратить круговую связь между сущностями. Как вы можете заметить Student , у класса нет public Listlt;CourseStudentgt; CourseStudents { get; set; } = new Listlt;CourseStudentgt;(); списка, а у CourseStudent класса нет Course свойства.

Но мне нужно удалить в каскаде, когда удаляется некоторая сущность/строка Course CourseStudent , отношение/строка тоже нужно удалить, а Student сущность/строку нужно удалить.

Как я могу удалить при каскадном предотвращении круговой ссылки между строками/объектами?

Комментарии:

1. Один из вариантов-удалить, вызвав хранимую процедуру

2. @viveknuna вы предложили методы внесения изменений в конфигурацию (EntityTypeBuilder), чтобы создать отношение для удаления в каскаде?

3. нет, я имею в виду, что всякий раз, когда вы удаляете в коде, вы можете вызвать хранимую процедуру для удаления записей из соответствующих таблиц