Связь many-to-many для трех моделей

226
31 августа 2021, 17:00

Есть три модели - школа, учителя и ученики.

public class Pupil
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string FavouriteLesson { get; set; }
    public SchoolEntity School { get; set; }
    public List<Teacher> Teachers { get; set; }
    public IList<DataLink> DataLink { get; set; }
}
public class SchoolEntity
{
    [Key]
    public int Id { get; set; }
    public bool DeepEnglishLearning { get; set; }
    public int? SchoolRating { get; set; }
    public List<Teacher> Teachers { get; set; }
    public List<Pupil> Pupils { get; set; }
    public IList<DataLink> DataLink { get; set; }
}
public class Teacher
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Subject { get; set; }
    public SchoolEntity School { get; set; }
    public List<Pupil> Pupils { get; set; }
    public IList<DataLink> DataLink { get; set; }
}

И есть класс DataLinks для создания связи многие ко многим:

  • у школы может быть много учеников и учителей
  • у учеников может быть одна школа и много учителей
  • у учителей может быть одна школа и много учеников.

DataLink.cs

public class DataLink
{
   public int TeacherId { get; set; }
   public Teacher Teacher { get; set; }
   public int PupilId { get; set; }
   public Pupil Pupil { get; set; }
}

Не пойму, я в DatabaseContext правильно прописал modelBuilder?

DatabaseContext

public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions<DatabaseContext> options)
        : base(options)
    {}
    public DbSet<SchoolEntity> SchoolTable { get; set; }
    public DbSet<Teacher> TeacherTable { get; set; }
    public DbSet<Pupil> PupilTable { get; set; }
    public DbSet<DataLink> DataLink { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SchoolEntity>().ToTable("School");
        modelBuilder.Entity<Teacher>().ToTable("Teacher");
        modelBuilder.Entity<Pupil>().ToTable("Pupil");
        // Это написано правильно?
        modelBuilder.Entity<DataLink>()
            .HasOne(dl => dl.Teacher)
            .WithMany(dl => dl.DataLink)
            .IsRequired()
            .OnDelete(DeleteBehavior.Cascade);
        modelBuilder.Entity<DataLink>()
            .HasOne(dl => dl.Pupil)
            .WithMany(dl => dl.DataLink)
            .IsRequired()
            .OnDelete(DeleteBehavior.Cascade);
    }
}
READ ALSO
Конвертация HTML в PDF средствами C#

Конвертация HTML в PDF средствами C#

Имеется HTML-страница, состоящая из 3х таблиц(пустых), которые заполняются с помощью JavaScript с определенной периодичностью(данные таблиц обновляются)Страница...

141
Проблема создания модели ADO.NET EDM из базы данных MySql

Проблема создания модели ADO.NET EDM из базы данных MySql

Необходима работать с базой данных MySql с помощью Entity FrameworkВерсия платформы:

124
Django перевод проект на MySQL

Django перевод проект на MySQL

Нужно перевести проект с SQLite на MySQLНастройки в settings

260
Django не дружит с MySQL

Django не дружит с MySQL

Все установил, запустил проект, создал бд в MySQL, натсроил пользователья и дал ему праваВ сеттингах:

191