You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core多对多查询关联3表获取产品及厂商名称的实现问题

解决方案

你遇到的Manufacturer对象为空的问题,是因为你仅加载了一级导航属性ProductManufacturer,没有加载该中间表实体下嵌套的Manufacturer导航属性,可通过以下两种方式实现单次查询同时获取产品名和厂商名:

方法1:使用Include+ThenInclude加载完整导航树

如果需要保留完整的实体关联结构,可以通过嵌套加载的方式拉取所有关联数据:

var result = DbSet<ProductTbl>()
    .Where(a => a.Id == 5)
    .AsNoTracking()
    .Include(a => a.ProductType)
    .Include(a => a.ProductManufacturer)
        .ThenInclude(pm => pm.Manufacturer) // 加载中间表关联的Manufacturer_LKP数据
    .FirstOrDefault();

获取数据后,可通过遍历result.ProductManufacturer集合,访问item.Manufacturer.ManufacturerName得到厂商名称。

方法2:使用投影查询(推荐,性能更高)

如果仅需要ProductName和ManufacturerName两个字段,无需加载完整实体,可直接使用投影查询,EF会自动生成关联SQL,无需手动声明Include:

var productManufacturerList = DbSet<ProductTbl>()
    .Where(a => a.Id == 5)
    .AsNoTracking()
    .SelectMany(p => p.ProductManufacturer.Select(pm => new 
    {
        ProductName = p.ProductName,
        ManufacturerName = pm.Manufacturer.ManufacturerName
    }))
    .ToList();

该方法返回的集合中每条记录对应一个产品和一个关联厂商的组合,可直接拿到所需字段,查询返回的数据量更小,性能更优。

内容的提问来源于stack exchange,提问作者Ehab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:15:03