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

一对一

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第1张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第2张图片

一对一关系配置

1、builder.HasOne(o =>o.Delivery).WithOne(d=>d.Order).HasForeignKey(d=>dOrderId);
2、测试插入和获取数据

示例

新建 Order
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第3张图片

新建 Delivery
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第4张图片
DeliveryConfig
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第5张图片
OrderConfig
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第6张图片
执行 迁移命令
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第7张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第8张图片
查看数据库

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第9张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第10张图片

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第11张图片

测试数据插入

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第12张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第13张图片
运行查看数据
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第14张图片

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第15张图片

多对多

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
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第16张图片

添加Teacher
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第17张图片

配置StudentConfig
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第18张图片

配置TeacherConfig

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第19张图片

配置DbContext
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第20张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第21张图片

执行数据库迁移命令

在这里插入图片描述
在这里插入图片描述

生成的数据库 表

Student
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第22张图片

Teacher
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第23张图片

指定的关系表
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第24张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第25张图片

插入数据测试

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第26张图片杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第27张图片

运行结果:
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第28张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第29张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第30张图片

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

杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第31张图片
运行结果
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第32张图片

基于关系的复杂查询

关系数据查询

1、查询评论中含有“微软”的所有的文章:ctx.Articles.Where(a=>a.Comments.Any(c=>c.Mesage.Contains(“微软”)));
2、查看生成的SOL语句。

示例:
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第33张图片
运行结果 和 sql
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第34张图片

变换形式

1、变换成另一种写法
ctx.Comments.Where(c => c.Message.Contains(“微”)
.Select(c => c.Article).Distinct();
2、查看生成的SQL语句
3、同样效果的代码可能有多种写法,有时候要关注底层的SQL,看哪种方式最好

示例:

在这里插入图片描述

运行结果和sql
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第35张图片
重复情况,
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第36张图片
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第37张图片
解决方式,加上Distinct()排重
在这里插入图片描述

运行结果:
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第38张图片

例子

1、查询“所有由蜗牛快递负责的订单信息力
ctx.Orders.Where(o=>o.Delivery.CompanyName=="蜗牛快递”)

示例:
杨中科 .NETCORE EFCORE第七部分 一对一,多对多_第39张图片

你可能感兴趣的:(ASP.NET,.netcore,数据库)