【问题标题】:Many to many with dataLoader in graphql-dotnet多对多与 graphql-dotnet 中的 dataLoader
【发布时间】:2020-04-06 07:05:09
【问题描述】:

我们如何使用 dataLoader 实现多对多?

假设我想获取有联系人的公司(一个联系人可以有多个公司)。 我有一个 companyLinks 作为 midde 表(带有 companyId/contactId)。

当一家公司只有 1 个联系人时,我有这个方法:

public async Task<ILookup<Guid, Contact>> GetContactsFromCompanyBatchAsync(IEnumerable<Guid> companyIds)    
{
  var contacts = _entities.Include(c => c.CompanyLinks).Where(contact => contact.CompanyLinks.Any(cl => companyIds.Contains(cl.CompanyId)));
  return contacts.ToLookup(cont => {
       var res = cont.CompanyLinks.Any() ? cont.CompanyLinks.ElementAt(0).CompanyId : Guid.Empty;
       return res;
  });
}

但是,如果联系人拥有超过 1 家公司怎么办?我怎样才能知道正确的 companyId ?

【问题讨论】:

  • 这个问题有解决办法吗?下个版本会推出吗?

标签: many-to-many graphql-dotnet


【解决方案1】:

感谢 sungram3r 的提示。 解决方法是从joining-table开始。

public async Task<ILookup<Guid, Contact>> GetContactsFromCompanyBatchCollectionAsync(IEnumerable<Guid> companyIds)
    {
        var companyContacts = _salesNoteContext.CompanyContact
           .Where(contactCompany => companyIds.Contains(contactCompany.CompanyId))
           .Include(contactCompany => contactCompany.Company);
        return companyContacts.ToLookup(contactCompany => contactCompany.CompanyId, contactCompany => contactCompany.Contact);
    }

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2020-12-19
    • 2019-02-09
    • 2020-12-14
    • 2018-09-14
    • 2018-09-28
    • 2020-05-27
    • 2021-06-24
    • 2019-11-10
    相关资源
    最近更新 更多