1、创建实体类
Student
internal class Student
{
public long Id { get; set; }
public string StuName { get; set; }
public List<Teacher> Teachers { get; set; } = new List<Teacher>();
}
Teacher
internal class Teacher
{
public long Id { get; set; }
public string TeaName { get; set; }
public List<Student> Students { get; set; } = new List<Student>();
}
2、创建配置文件,配置多对多关系,并指定中间表表名
StudentConfig
internal class StudentConfig : IEntityTypeConfiguration<Student>
{
public void Configure(EntityTypeBuilder<Student> builder)
{
builder.ToTable("T_Students");
builder.HasMany<Teacher>(s => s.Teachers).WithMany(t=> t.Students)
.UsingEntity(u => u.ToTable("T_Students_Related_Teachers"));
}
}
TeacherConfig
internal class TeacherConfig : IEntityTypeConfiguration<Teacher>
{
public void Configure(EntityTypeBuilder<Teacher> builder)
{
builder.ToTable("T_Teachers");
}
}
3、创建MyDbContext
class MyDbContext:DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Teacher> Teachers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("Server=DESKTOP-7K7ADF7;Database=EFCore5;User Id=sa;Password=XXXXTrustServerCertificate=True;Trusted_Connection=True;MultipleActiveResultSets=True;");
// .EnableSensitiveDataLogging() // 显示敏感数据(仅用于调试)
// .LogTo(Console.WriteLine, LogLevel.Debug);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
}
4、生成迁入脚本,并更新到数据库生成表结构
Add-Migration AddStuAndTeacher
update-database
5、插入数据、查询数据
using (MyDbContext dbContext = new MyDbContext())
{
//Student student1 = new Student() { StuName="张三"};
//Student student2 = new Student() { StuName = "李四" };
//Student student3 = new Student() { StuName = "王五" };
//Teacher teacher1 = new Teacher() { TeaName= "Mr Lei" };
//Teacher teacher2 = new Teacher() { TeaName = "Mr Chen" };
//Teacher teacher3 = new Teacher() { TeaName = "Mr Zhou" };
//student1.Teachers.Add(teacher1);
//student1.Teachers.Add(teacher2);
//student2.Teachers.Add(teacher2);
//student2.Teachers.Add(teacher3);
//student3.Teachers.Add(teacher1);
//student3.Teachers.Add(teacher2);
//student3.Teachers.Add(teacher3);
//dbContext.Students.Add(student1);
//dbContext.Students.Add(student2);
//dbContext.Students.Add(student3);
//dbContext.Teachers.Add(teacher1);
//dbContext.Teachers.Add(teacher2);
//dbContext.Teachers.Add(teacher3);
//await dbContext.SaveChangesAsync();
//通过学生査老师
var students = dbContext.Students.Include(s => s.Teachers);
foreach (var student in students)
{
Console.WriteLine($"{student.StuName}的老师如下:");
foreach (var teacher in student.Teachers)
{
Console.WriteLine(teacher.TeaName);
}
}
//通过老师查学生
var teachers = dbContext.Teachers.Include(s => s.Students);
foreach (var teacher in teachers)
{
Console.WriteLine($"{teacher.TeaName}的学生如下:");
foreach (var student in teacher.Students)
{
Console.WriteLine(student.StuName);
}
}
}