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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章