一、EFCore中一对多关系数据的获取
获取id为1的信息以及它对应的Comments
代码如下
输出结果为:
并没有查询到对应的comments
断点查看
断电查看Comments并没有查出来
查看select语句
SELECT TOP(2) [t].[Id], [t].[Message], [t].[Title] FROM [T_Articles] AS [t] WHERE [t].[Id] = CAST(1 AS bigint)
发现只查询了一个表 并没有查询T_Comment表
这时候需要修改语句
Article article = context.Articles.Include(a => a.comments).Single(a => a.Id == 1);
意思是把Article的comments属性关联查询出来
运行结果
查看select语句
SELECT [t0].[Id], [t0].[Message], [t0].[Title], [t1].[Id], [t1].[Message], [t1].[TheArticleId] FROM ( SELECT TOP(2) [t].[Id], [t].[Message], [t].[Title] FROM [T_Articles] AS [t] WHERE [t].[Id] = CAST(1 AS bigint) ) AS [t0] LEFT JOIN [T_Comments] AS [t1] ON [t0].[Id] = [t1].[TheArticleId] ORDER BY [t0].[Id]
发现两个表使用join连接
include作用是把关联的对象也给查询出来
二、一对一
一对一关系配置
builder.HasOne<Delivery>(o => o.Delivery).WithOne(d => d.Order).HasForeignKey<Delivery>(d => d.OrderId);
一个订单对应一个快递单 一个快递单对应一个订单
一对一必须在其中一个实体类中声明一个外键属性