EF Core中通過Fluent API配置一對多關係
阿新 • • 發佈:2022-04-06
接上篇部落格,繼續演示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(); }