我的代码设置如下(.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 个查询被触发
- 加载 Order 表的父数据
- 通过 dataLoader 加载订单详情