Loading

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();             
}

 

posted @ 2022-04-06 11:38  guwei4037  阅读(143)  评论(0编辑  收藏  举报