如何解决使用投影不会加载用数据加载器解析的字段
我的代码设置如下(.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加载订单详情
解决方法
您好@adesh 不幸的是,UseSelection 不能很好地与数据加载器配合使用。您无法选择已解析的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。