我看到可以将数据加载器用于根查询,但也可以将数据加载器用于嵌套连接吗?在下面的示例中,我想为属性使用数据加载器rooms
。在底部的示例请求中,将进行三个数据库查询。一个由数据加载器获取两座建筑物,一个获取建筑物 1 的房间,另一个获取建筑物 2 的房间。相反,我试图为房间使用数据加载器,因此只有两个数据库查询制成。
// Building DB table
ID | Name
1 | Main Campus
2 | Satellite Campus
// Rooms DB table
ID | BuildingId | Name
1 | 1 | Lab
2 | 1 | Dorm
3 | 2 | Theatre
4 | 2 | Gym
// Schema
type Building {
id: Int!
name: String!
rooms(after: String before: String first: PaginationAmount last: PaginationAmount): RoomsConnection
}
type Room {
id: Int!
name: String!
building: Building!
}
// Hot Chocolate
public class BuildingType: ObjectType<Building> {
protected override void Configure(IObjectTypeDescriptor<Building> descriptor)
{
// ... omitted other fields for brevity
// Instead of using a resolver, can a data loader be used instead?
descriptor.Field(b => b.rooms).UsePaging<RoomType>().Resolver(ctx => {
var building = ctx.Parent<Building>();
var roomsRepository = ctx.Service<IRoomsRepository>();
return roomsRepository.GetRoomsByBuildingId(building.Id);
});
}
}
// Example request
query {
a: building(id: 1){
id,
name,
rooms {
nodes {
id,
name
}
}
},
b: building(id: 2){
id,
name,
rooms {
nodes {
id,
name
}
}
}
}