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
- To load the parent data of Order table
- To load order details by dataLoader