Class.cs:
public class Class
{
public int ClassId { get; set; }
public string ClassName { get; set; }
public ICollection StudentClasses { get; set; }
}
Student.cs:
public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public ICollection StudentClasses { get; set; }
}
StudentClass.cs:
public class StudentClass
{
public int StudentId { get; set; }
public Student Student { get; set; }
public int ClassId { get; set; }
public Class Class { get; set; }
}
然后,在DbContext中配置多对多关系。在这个例子中,我们将通过覆盖OnModelCreating方法来配置多对多关系。
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions options)
: base(options)
{
}
public DbSet Students { get; set; }
public DbSet Classes { get; set; }
public DbSet StudentClasses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasKey(sc => new { sc.StudentId, sc.ClassId });
modelBuilder.Entity()
.HasOne(sc => sc.Student)
.WithMany(s => s.StudentClasses)
.HasForeignKey(sc => sc.StudentId);
modelBuilder.Entity()
.HasOne(sc => sc.Class)
.WithMany(c => c.StudentClasses)
.HasForeignKey(sc => sc.ClassId);
}
}
在这个方法中,我们使用EntityTypeBuilder API来配置StudentClass实体类作为多对多关系的中间关联表。
在查询多对多关系数据时,可以使用Include方法来包含关联数据。
var students = _context.Students
.Include(s => s.StudentClasses)
.ThenInclude(sc => sc.Class)
.ToList();
在这个例子中,我们使用Include和ThenInclude来加载Student和关联的Class实体对象。