#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. нет, я имею в виду, что всякий раз, когда вы удаляете в коде, вы можете вызвать хранимую процедуру для удаления записей из соответствующих таблиц