0

我的代码设置如下(.AddProjection() 已添加到 Startup.cs 文件中)

[UseApplicationDbContext]
[UsePaging(MaxPageSize = 1000)]
[UseProjection]
[UseFiltering]
[UseSorting]
public async Task<IQueryable<Order>> GetOrders(
        [ScopedService] MyDbContext context
        , [Service] IOrderRepo _repository)
{
    return await _repository.GetOrders(context);
}

public class Order {
    ... Some properties

    public OrderDetail Detail {get;set;}
}

 public class OrderType : ObjectType<Order>
{
    protected override void Configure(IObjectTypeDescriptor<Order> descriptor)
    {
        descriptor.Field(x => x.OrderId).IsProjected(true);

        descriptor.Field(e => e.Details)
            .IsProjected(false)
            .ResolveWith<OrderDetailResolvers>(er => er.GetOrderDetailAsync(default!, default!, default));
    }
}        

private class OrderDetailResolvers
{
    public async Task<OrderDetail?> GetOrderDetailAsync(
        Order order,
        OrderDetailByIdDataLoader dataLoader,
        CancellationToken cancellationToken)
    {
        if (order.OrderId is null)
        {
            return null;
        }

        return await dataLoader.LoadAsync(order.OrderId, cancellationToken);
    }
}

当我这样查询时:

query {
    orders
    {
        edges {
          node {
              orderId
              detail {
                  orderId
                  productId
                  ...
              }
          }
        }
    }
}

我得到以下结果:

"data": {
    "orders": {
      "edges": [
        {
          "node": {
            "orderId": "10000458",            
            "detail": {}
          }
        },
        ... and so on all the data
      ]
    }
}

问题是在查询结果中嵌套的订单详细信息数据永远不会出现(即使数据加载器执行相同的查询)。

我可以看到 2 个查询被触发

  1. 加载 Order 表的父数据
  2. 通过 dataLoader 加载订单详情
4

1 回答 1

1

您好@adesh,不幸的是,UseSelection 不适用于数据加载器。您无法选择已解析的数据。

于 2021-03-10T21:15:00.133 回答