数据模型通过EF Core映射成数据库表, 使我们不必通过SQL语句既可操作数据库.
- 模型中只有get访问器的字段在映射时不会创建数据库列
- 实体的导航属性用于创建数据库的外键
- 关于限制级联删除规则
比如这样一个数据模型: 一所大学里系(Department)拥有一个系主任外键(Department.InstructorID), 系主任由一位讲师担任(Instructor.ID).
如果将 Department.InstructorID 属性定义为不可为 null,EF Core 将配置级联删除规则。 在这种情况下,指定为系主任的讲师被删除时,该系将被删除。 在这种情况下,限制规则将更有意义。 以下 fluent API 将设置限制规则并禁用级联规则。
- 多对多关系
实体之间的多对多关系一般要在中间建立一个联接表(JT)拆解为一对多关系。 联接表分为“具有有效负载”的多对多联接表和无有效负载的多对多联接表(纯联接表 PJT)。
注意:EF 6.x 支持多对多关系的隐式联接表,但 EF Core 不支持
modelBuilder.Entity<Department>()
.HasOne(d => d.Administrator)
.WithMany()
.OnDelete(DeleteBehavior.Restrict)
- 关于组合键
联接表中的两个 FK可共同唯一标识 表中的每一行, 因此不需要专用的 PK。 两个FK属性充当组合 PK。 使用 Fluent API 是向 EF Core 指定组合 PK 的唯一方法 .
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CourseAssignment>(