接上篇博客,继续演示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();
}