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