0

I have my code setup as below (.AddProjection() is already added in Startup.cs file )

[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);
    }
}

When I Query like this :

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

I get below result :

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

Issue is that in the query result the nested order detail data is never showed up (even when the data loaders executes query for the same).

I can see 2 queries fired up

  1. To load the parent data of Order table
  2. To load order details by dataLoader
adesh
  • 11
  • 2
  • 9

1 Answers1

1

UseSelection does not work well with dataloaders.. You cannot select on already resolved data..

Joundill
  • 6,828
  • 12
  • 36
  • 50
dami
  • 146
  • 1
  • 7