У меня есть три модели: школа, учитель и ученик
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; }
}
Как мне настроить OnModelCreating
метод, чтобы он работал?
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; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SchoolEntity>().ToTable("School");
modelBuilder.Entity<Teacher>().ToTable("Teacher");
modelBuilder.Entity<Pupil>().ToTable("Pupil");
// Is it correct?
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.Restrict);
}
}