首页 > 解决方案 > 包含在 EF C# 中

问题描述

我有三张表:会员、公司和公司地址

我可以使用 Include 获取与成员的业务,但我正在尝试获取 businessAddress,我猜它要求直接关系。这是我的模型:

[Table("member")]
public partial class Member
{
    public Member()
    {
        Business = new HashSet<Business>();
       // BusinessAddress = new HashSet<BusinessAddress>();

    }

    [Key]
    public int memberId { get; set; }
    public int chapterid { get; set; }
    public string title { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
    public bool IsActive { get; set; }
    public string classification { get; set; }
    public int SortOrder { get; set; }
    public virtual ICollection<Business> Business { get; set; }

   // public virtual ICollection<BusinessAddress> BusinessAddress { get; set; }
}

商业

[Table("Business")]
public partial class Business
{
    public Business()
    {
        BusinessAddress = new HashSet<BusinessAddress>();
    }

    [Key]
    public int BusinessID { get; set; }
    public int? categoryid { get; set; }
    public int? subcategoryid { get; set; }
    public int memberid { get; set; }
    public string businessname { get; set; }
    public string dealingin { get; set; }

    public int? sortOrder { get; set; }

    [ForeignKey("memberid")]
    public Member Member { get; set; }

    public ICollection<BusinessAddress> BusinessAddress { get; set; }
}

营业地址

[Table("BusinessAddress")]
public partial class BusinessAddress
{
    [Key]
    public int businessaddressid { get; set; }

    public int businessid { get; set; }
    [ForeignKey("businessid")]
    public virtual Business Business { get; set; }
    public string address { get; set; }
}

以下是我的 EF 查询:

var list = _dbContext.Member.Include("Business").OrderByDescending(x => x.SortOrder).ThenBy(x => x.firstname).ToList();

我想获得具有业务和业务地址的成员。我试过 Include("BusinesADdress") 没用,请帮帮我。

标签: c#entity-frameworkinclude

解决方案


尝试使用Include接受 lambda 选择器,后跟ThenInclude

var list = _dbContext.Member
    .Include(m => m.Business)
    .ThenInclude(b => b.BusinessAddress)
    .OrderByDescending(x => x.SortOrder)
    .ThenBy(x => x.firstname)
    .ToList();

您也可以通过.Include调用中附加所有需要的关系,但总的来说我建议不要这样做,因为第一种方法是类型安全的:

var list = _dbContext.Member
    .Include("Business.BusinessAddress")
    .OrderByDescending(x => x.SortOrder)
    .ThenBy(x => x.firstname)
    .ToList();

推荐阅读