我在我的产品类中收集了图像:
public ICollection<Image> Images { get; set; } = null!;
字符串
我遇到的问题,图像不包括当我试图采取只有4个第一产品。此代码包括图像
var products = await _context.Products
.Include(x => x.Images)
.AsSplitQuery()
.ToListAsync();
型
但这并不包括他们
var products = await _context.Products
.Take(4)
.Include(x => x.Images)
.AsSplitQuery()
.ToListAsync();
型
This is SQL generated with Take
This is without Take的
当我包含其他实体时,图像也被包含在内。例如,我在Product类中有Brand字段
public int BrandId { get; set; }
public Brand Brand { get; set; } = null!;
型
此代码包括品牌和图像
var products = await _context.Products
.Take(4)
.Include(x => x.Images)
.Include(x => x.Brand)
.AsSplitQuery()
.ToListAsync();
型
为什么使用Take方法时不包含图像?我可以更改为单个查询或使用Select()指定我需要获取的内容,它将工作。但是我想知道拆分查询的问题是什么。我使用PostgreSQL作为数据库。
2条答案
按热度按时间ffx8fchx1#
在
Include()
之前使用Take()
时,EF Core会生成一个包含LIMIT
子句的SQL查询,以便仅提取指定数量的产品。但是,当EF Core拆分查询并为相关实体执行单独的查询时,它不会在这些查询中包含LIMIT
子句。您可以尝试删除
AsSplitQuery()
=>字符串
或者
拆分查询=>
型
z8dt9xmd2#
EF Core正在生成一个包含
LIMIT
子句的SQL查询,以仅获取指定数量的产品。但是,当EF Core拆分查询并为相关实体执行单独的查询时,它不会在这些查询中包含LIMIT
子句。这种使用可以清楚地看到在生成的查询。如果满足您的要求,您可以使用拆分查询。
字符串
也可以运行单独的查询。