EF Core中通过Fluent API配置一对多关系
接上篇博客,继续演示Fluent API配置一对多的关系。
以班级-学生为例,一个班级有多个学生,一个学生属于一个班级。
ER图如下:
同样的,我们需要准备好如上实体类。
班级类:
public class Class { public int ClassId { get; set; } public string ClassName { get; set; } public virtual ICollection<Student> Students { get; set; } }
学生类:
public class Student { public int StudentId { get; set; } public string StudentName { get; set; } public virtual Class Class { get; set; } }
在数据库上下文中添加配置:
public class MyDbContext : DbContext { public MyDbContext() { } public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //一个班级有多个学生 modelBuilder.Entity<Class>() .HasMany(o => o.Students) .WithOne(o => o.Class); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); optionsBuilder.UseSqlServer("server=xxx.xxx.xxx.xxx;database=数据库名称;uid=数据库账号;pwd=数据库密码;"); } public DbSet<Class> Class { get; set; } public DbSet<Student> Student { get; set; } }
配置好之后就可以直接使用了,比如:
using (var db = new MyDbContext()) { //通过班级名称找到班级所有学生 List<Student> students = db.Class.Include(o => o.Students).FirstOrDefault(o => o.ClassName.Equals("一年级1班")).Students.ToList(); //通过学生姓名找到所在班级 Class @class = db.Student.Include(o => o.Class).FirstOrDefault(o => "王五".Contains(o.StudentName)).Class; //指定班级下增加一个学生 db.Student.Add(new Student() { StudentId = 4, StudentName = "赵六", Class = db.Class.FirstOrDefault(t => t.ClassName.Equals("一年级2班")) }); //提交 db.SaveChanges(); }