【问题标题】:Using Projections does not load field resolved with dataloader使用 Projections 不会加载使用数据加载器解析的字段
【发布时间】:2021-03-10 18:45:28
【问题描述】:

我的代码设置如下(.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加载订单详情

【问题讨论】:

    标签: .net-core graphql ef-core-5.0 hotchocolate


    【解决方案1】:

    你好 @adesh 不幸的是 UseSelection 不能很好地与数据加载器一起工作。你不能选择已经解析的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多