博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EntityFrameworkCore 一对一 && 一对多 && 多对多配置
阅读量:6603 次
发布时间:2019-06-24

本文共 2575 字,大约阅读时间需要 8 分钟。

基本数据结构

default

表设计如下:
入学记录

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
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
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
StudentTeacherRelationships { get; set; }}

一对一

学生-入学记录

public long AdmissionRecordId { get; set; }//Student-AdmissionRecord 1:1[ForeignKey("AdmissionRecordId")]public virtual AdmissionRecord AdmissionRecord { get; set; }

另解

modelBuilder.Entity
() .HasOne(p => p.AdmissionRecord) .WithOne(p => p.Student) .HasForeignKey
(p => p.AdmissionRecordId);

参考资料:

一对多

学生-班级

modelBuilder.Entity
() .HasMany(p => p.Students) .WithOne(p => p.Class) .HasForeignKey(p => p.ClassId) .OnDelete(DeleteBehavior.ClientSetNull);//下面写法也可以//modelBuilder.Entity
()// .HasOne(p => p.Class)// .WithMany(p=>p.Students)// .HasForeignKey(k => k.ClassId)// .OnDelete(DeleteBehavior.ClientSetNull);

多对多

学生-教师

//通过StudentTeacherRelationship中间表,通过实现两个1:n,实现m:nmodelBuilder.Entity
() .HasOne(p => p.Student) .WithMany(p => p.StudentTeacherRelationships) .HasForeignKey(k => k.StudentId) .OnDelete(DeleteBehavior.ClientSetNull);modelBuilder.Entity
() .HasOne(p => p.Teacher) .WithMany(p => p.StudentTeacherRelationships) .HasForeignKey(k => k.TeacherId) .OnDelete(DeleteBehavior.ClientSetNull);

示例代码

转载于:https://www.cnblogs.com/Lulus/p/9497874.html

你可能感兴趣的文章
050:navie时间和aware时间详解
查看>>
百度地图车辆运动轨迹
查看>>
使用ReaderWriterLock类实现多用户读/单用户写同步
查看>>
用 Hexo + Next + GitHubPages 搭建漂亮的免费博客
查看>>
Pandas:按条件进行行选择
查看>>
spring boot 自定义规则访问获取内部或者外部静态资源图片
查看>>
springmvc + mybatis + ehcache + redis架构
查看>>
sed指定行范围匹配(转贴!)
查看>>
C#语音朗读文本 — TTS的实现
查看>>
Python正则表达式初识(十)附正则表达式总结
查看>>
APICLOUD 1.1.0 开发环境搭建
查看>>
《Cadence 16.6电路设计与仿真从入门到精通》——导读
查看>>
Confluence 6 如何让我的小组成员知道那些内容是重要的
查看>>
找到一个适合的分布式文件系统之各种分布式文件系统优缺点对比
查看>>
httpd基本配置
查看>>
索引失效的几个原因
查看>>
关于多线程中使用while做循环而不使用if的解释
查看>>
欢迎你,企业基础架构CCIE,RS CCIEv5.0的升级版新时代迎合自动化运维的网工顶级认证...
查看>>
js typoeof用法
查看>>
五险一金,你清楚吗?
查看>>