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

EF Core迁移后如何关联查询Advertiser与Address表数据

如何在EF Core中查询Advertiser时同时获取关联的Address数据

问题原因

EF Core默认不会自动加载关联的导航属性(比如你的Advertiser.Address),直接调用_db.Advertisers.ToListAsync()只会查询Advertiser表的数据,不会关联查询Address表。

解决方案1:预加载关联实体(Include方法)

使用Include方法可以告诉EF Core在查询Advertiser的同时,一并查询对应的Address数据,填充到Advertiser.Address属性中。

实现步骤:

  1. 引入Microsoft.EntityFrameworkCore命名空间(Include方法属于该命名空间)。
  2. 修改GetActiveAsync方法,添加Include(a => a.Address):
using Microsoft.EntityFrameworkCore;

public async Task<IList<Advertiser>> GetActiveAsync()
{
    return await _db.Advertisers
        .Include(a => a.Address) // 预加载关联的Address实体
        .ToListAsync();
}

执行此查询后,每个Advertiser对象的Address属性会自动填充对应的AddressLine1、City、State数据。

解决方案2:投影到DTO(只获取需要的字段)

如果不需要完整的Address实体,只想获取AddressLine1、City、State这几个字段,可以通过投影到自定义DTO(数据传输对象)实现,这样能减少数据库查询的数据量,提升性能。

实现步骤:

  1. 创建包含所需字段的DTO类:
public class AdvertiserWithAddressDto
{
    public int AdvertiserId { get; set; }
    public string Name { get; set; } = string.Empty;
    public string AddressLine1 { get; set; } = string.Empty;
    public string City { get; set; } = string.Empty;
    public string State { get; set; } = string.Empty;
}
  1. 修改查询方法,使用Select进行字段投影:
public async Task<IList<AdvertiserWithAddressDto>> GetActiveAsync()
{
    return await _db.Advertisers
        .Select(a => new AdvertiserWithAddressDto
        {
            AdvertiserId = a.AdvertiserId,
            Name = a.Name,
            AddressLine1 = a.Address.AddressLine1,
            City = a.Address.City,
            State = a.Address.State
        })
        .ToListAsync();
}

注意事项

确保你的Address实体类定义正确,包含对应字段:

public class Address
{
    public int AddressId { get; set; }
    public string AddressLine1 { get; set; } = string.Empty;
    public string City { get; set; } = string.Empty;
    public string State { get; set; } = string.Empty;

    // 可选:如需反向关联Advertiser,可添加此属性
    public Advertiser? Advertiser { get; set; }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:19