EntityFrameworkCore 一对一 && 一对多 && 多对多配置
基本数据结构

表设计如下:
入学记录
public class AdmissionRecord
{
[Key]
public long Id { get; set; }
public DateTime AdmissionTime { get; set; }
public string Remark { get; set; }
}
班级
public class Class
{
[Key]
public long Id { get; set; }
public DateTime CreationTime { get; set; }
public string ClassName { get; set; }
public virtual List<Student> Students { get; set; }
}
学生-教师关系表
public class StudentTeacherRelationship
{
[Key]
public long Id { get; set; }
public long StudentId { get; set; }
public virtual Student Student { get; set; }
public long TeacherId { get; set; }
public virtual Teacher Teacher { get; set; }
}
教师
public class Teacher
{
[Key]
public long Id { get; set; }
public string Name { get; set; }
public string TeacherId { get; set; }
public virtual List<StudentTeacherRelationship> StudentTeacherRelationships { get; set; }
}
学生
public class Student
{
[Key]
public long Id { get; set; }
public string StudentId { get; set; }
public string Name { get; set; }
public long AdmissionRecordId { get; set; }
//Student-AdmissionRecord 1:1
[ForeignKey("AdmissionRecordId")]
public virtual AdmissionRecord AdmissionRecord { get; set; }
public long ClassId { get; set; }
public virtual Class Class { get; set; }
public virtual List<StudentTeacherRelationship> StudentTeacherRelationships { get; set; }
}
一对一
学生-入学记录
public long AdmissionRecordId { get; set; }
//Student-AdmissionRecord 1:1
[ForeignKey("AdmissionRecordId")]
public virtual AdmissionRecord AdmissionRecord { get; set; }
另解
modelBuilder.Entity<Student>()
.HasOne(p => p.AdmissionRecord)
.WithOne(p => p.Student)
.HasForeignKey<Student>(p => p.AdmissionRecordId);
参考资料:
Configuring One To One Relationships In Entity Framework Core
一对多
学生-班级
modelBuilder.Entity<Class>()
.HasMany(p => p.Students)
.WithOne(p => p.Class)
.HasForeignKey(p => p.ClassId)
.OnDelete(DeleteBehavior.ClientSetNull);
//下面写法也可以
//modelBuilder.Entity<Student>()
// .HasOne(p => p.Class)
// .WithMany(p=>p.Students)
// .HasForeignKey(k => k.ClassId)
// .OnDelete(DeleteBehavior.ClientSetNull);
多对多
学生-教师
//通过StudentTeacherRelationship中间表,通过实现两个1:n,实现m:n
modelBuilder.Entity<StudentTeacherRelationship>()
.HasOne(p => p.Student)
.WithMany(p => p.StudentTeacherRelationships)
.HasForeignKey(k => k.StudentId)
.OnDelete(DeleteBehavior.ClientSetNull);
modelBuilder.Entity<StudentTeacherRelationship>()
.HasOne(p => p.Teacher)
.WithMany(p => p.StudentTeacherRelationships)
.HasForeignKey(k => k.TeacherId)
.OnDelete(DeleteBehavior.ClientSetNull);
示例代码
EntityFrameworkCore 一对一 && 一对多 && 多对多配置的更多相关文章
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- mybatis 一对一 一对多 多对多
一对一 一对多 多对多
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置
1.Mybatis多表查询1.1 一对一查询1.1.1 一对一查询的模型用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的 ...
- 使用NHibernate(7)-- 一对一 && 一对多 && 多对多
1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...
- day 69-70 一对一 一对多 多对一联表查询
day 69 orm操作之表关系,多对多,多对一 多对一/一对多, 多对多{类中的定义方法} day69 1. 昨日内容回顾 1. 单表增删改查 2. 单表查询API 返回QuerySet对象的: 1 ...
- 初学者易上手的SSH-hibernate04 一对一 一对多 多对多
这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...
随机推荐
- iOS开发Quartz2D之 七:雪花效果
#import "VCView.h" @implementation VCView -(void)awakeFromNib { //[NSTimer scheduledTimerW ...
- jquery-11 如何实现标签的鼠标拖动效果
jquery-11 如何实现标签的鼠标拖动效果 一.总结 一句话总结:核心原理:1.标签实现绝对定位,位置的话跟着鼠标走.2.点击标签的话,给标签绑定事件,停止按住鼠标的话,解除绑定的事件. 1.事件 ...
- 【40.17%】【codeforces 569B】Inventory
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- PatentTips - 在物联网中进行数据过滤的方法和装置
背景技术 [0001] 本发明涉及物联网,特别涉及在物联网进行数据过滤的方法和装置. [0002] 物联网是新一代信息技术的重要组成部分,特指物物相连的网络.具体地,物联网是指通过各种信息传感设备,如 ...
- 文件上传api——MultipartFile
MultipartFile 方法总结 byte[] getBytes() 返回文件的内容作为一个字节数组. String getContentType() 返回文件的内容类型. InputStr ...
- JSON 表达式
JSON语法规则: 数据在名称/值对中: 数据由逗号分隔: 大括号保存对象: 中括号保存数组 1.访问对象值: var myObj,x; myObj = {" ...
- [Ramda] Refactor to Point Free Functions with Ramda using compose and converge
In this lesson we'll take some existing code and refactor it using some functions from the Ramda lib ...
- 【iOS】怎样推断文本文件的字符编码格式
整体思路: 遍历全部的字符编码.能正确读取输出转换的就是文本文件的编码格式. 代码例如以下: // // main.m // 检測文本字符编码格式的小技巧 // // Created by 杜子兮 ( ...
- [自学AndroidStudio系列]第二篇章:高速上手AS小技巧其一
事实上看过第一篇的文章的人可能发现了,这个系列实际上是针对,有android开发经验的,之前使用Eclipse的开发人员;所以,避免无谓的口舌,直接进入说重点吧; 关闭项目自己主动打开 AS会自己主动 ...
- Linux网络编程——原始套接字能干什么?
通常情况下程序员接所接触到的套接字(Socket)为两类: (1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用: (2)数据报式套接字(SOCK ...