杨中科 .NETCORE EFCORE第七部分 一对一,多对多

一对一


一对一关系配置

1、builder.HasOne(o =>o.Delivery).WithOne(d=>d.Order).HasForeignKey(d=>dOrderId);

2、测试插入和获取数据

示例

新建 Order

新建 Delivery

DeliveryConfig

OrderConfig

执行 迁移命令

查看数据库


测试数据插入


运行查看数据

多对多

1、多对多:老师一学生

2、EF Core 5.0开始,才正式支持多对多

3、需要中间表,举例数据

多对多实体

class Student

public long Id { get; set; }

public string Name { get; set;}

public List Teachers { get; set;} = new List();

classTeacher

public long Id { get; set; )

public string Name { get; set;)

public ListStudents { get; set;} = new List();

多对多关系配置

builder.HasMany(s =>s.Teachers).WithMany(t=>t.Students).UsingEntity(j=>j.ToTable("T_Students_Teachers"));

示例:

新建Student

添加Teacher

配置StudentConfig

配置TeacherConfig

配置DbContext

执行数据库迁移命令


生成的数据库 表

Student

Teacher

指定的关系表

插入数据测试

运行结果:


查询一下所有的老师,并且列出他们的学生

运行结果

基于关系的复杂查询

关系数据查询

1、查询评论中含有"微软"的所有的文章:ctx.Articles.Where(a=>a.Comments.Any(c=>c.Mesage.Contains("微软")));

2、查看生成的SOL语句。

示例:

运行结果 和 sql

变换形式

1、变换成另一种写法

ctx.Comments.Where(c => c.Message.Contains("微")

.Select(c => c.Article).Distinct();

2、查看生成的SQL语句

3、同样效果的代码可能有多种写法,有时候要关注底层的SQL,看哪种方式最好

示例:

运行结果和sql

重复情况,

解决方式,加上Distinct()排重

运行结果:

例子

1、查询"所有由蜗牛快递负责的订单信息力

ctx.Orders.Where(o=>o.Delivery.CompanyName=="蜗牛快递")

示例:

相关推荐
麦聪聊数据2 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦3 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区3 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录4 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong4 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术5 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客6 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海6 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
LeenixP7 小时前
RK3576-Debian12删除userdata分区
linux·运维·服务器·数据库·debian·开发板
知行合一。。。7 小时前
Python--03--函数入门
android·数据库·python