Я пытаюсь реализовать API-интерфейс graphql в C #.У меня работают основы, но я изо всех сил пытаюсь заставить работать вложенные запросы.
Я видел, как это реализовано в подобных NodeJS и других.Мне просто интересно, может ли кто-нибудь помочь мне реализовать то же самое в c #.
базовых типах:
public AirportType()
{
Name = "Airport";
Field(x => x.Id, type: typeof(IdGraphType)).Description("The ID of the Airport.");
Field(x => x.Name).Description("The name of the Airport");
Field(x => x.Location).Description("The Location of the Airport");
Field(x => x.Plane,nullable:true, type: typeof(ListGraphType<PlaneType>)).Description("Aiports Planes");
}
public PlaneType()
{
Name = "Plane";
Field(x => x.Id, type: typeof(IdGraphType)).Description("The ID of the Plane.");
Field(x => x.Model).Description("The model of the Plane");
Field(x => x.Callsign).Description("The callsign of the Plane");
Field(x => x.AirportId,nullable:true).Description("The parent Aiport");
Field(x => x.Pilot,nullable:true, type: typeof(ListGraphType<PilotType>)).Description("The Planes Pilots");
}
public PilotType()
{
Name = "Pilot";
Field(x => x.Id, type: typeof(IdGraphType)).Description("The ID of the Pilot.");
Field(x => x.Name).Description("The name of the Pilot");
Field(x => x.Surname).Description("The surname of the Pilot");
Field(x => x.PlaneId,nullable: true).Description("The parent Plane");
}
и базовых запросах:
Field<AirportType>(
"airport",
arguments: new QueryArguments(
new QueryArgument<IdGraphType> { Name = "id", Description = "The ID of the aiport." }),
resolve: context =>
{
var id = context.GetArgument<int?>("id");
var airport = db.Airport.Include("Plane.Pilot").FirstOrDefault(i => i.Id == id);
return airport;
});
Field<ListGraphType<AirportType>>(
"airports",
resolve: context =>
{
var airports = db.Airport.Include("Plane.Pilot");
return airports;
});
Field<ListGraphType<PlaneType>>(
"planes",
resolve: context =>
{
var planes = db.Plane.Include("Pilot").Include("Airport");
return planes;
});