0

I'm using HotChocolate to create a GraphQL service in .net6.

Having this type

public class OrderPrjectionType : ObjectType<OrderPrjection>
{
    protected override void Configure(IObjectTypeDescriptor<OrderPrjection> descriptor)
    {
        descriptor.Field(o => o.Id).Type<NonNullType<IdType>>();
        descriptor.Field(o => o.ZipCode).Type<NonNullType<StringType>>();
        descriptor.Field(o => o.City).Type<NonNullType<StringType>>();
        descriptor.Field(o => o.Items).Type<NonNullType<ListType<OrderItemProjectionType>>>()
            .ResolveWith<OrderResolver>(resolver => resolver.GetOrderAsync(default!, default!, default!, default!))
            .UseDataloader<OrderItemDataLoader>();
    }
}

public class OrderItemProjectionType : ObjectType<OrderItemProjection>
{
    protected override void Configure(IObjectTypeDescriptor<OrderItemProjection> descriptor)
    {
        descriptor.Field(o => o.Id).Type<NonNullType<UuidType>>();
        descriptor.Field(o => o.Name).Type<NonNullType<StringType>>();
    }
}

I'm trying to query to get a order's items list

This results in :

{
   "errors": [
    {
    "message": "There was no argument with the name `id` found on the field `items`.",
    "locations": [
        {
        "line": 5,
        "column": 5
        }
    ],
    "path": [
        "orderById",
        "items"
    ],
    "extensions": {
        "fieldName": "items",
        "argumentName": "id"
    }
    }
   ] 
}

This is the query that I'm trying to execute.

query {
  orderById(id: 1) {
    id,
    city,
    items {
      id
      name
    }
  }
}

The OrderPrjection object is fully initialized when the resolver returns.

This is the structure for the OrderItemProjection

public class OrderItemProjection
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

And also, If I mock the data something like this

    descriptor.Field(o => o.Id).Type<NonNullType<IntType>>();
    descriptor.Field(o => o.ZipCode).Type<NonNullType<StringType>>();
    descriptor.Field(o => o.City).Type<NonNullType<StringType>>();
    descriptor.Field(o => o.Items).Type<NonNullType<ListType<OrderItemProjectionType>>>()
        .Resolve(context =>
        {
            var orderItems = new List<OrderItemProjection>
            {
                new OrderItemProjection { Id = Guid.NewGuid(), Name = "Item 1" },
                new OrderItemProjection { Id = Guid.NewGuid(), Name = "Item 2" },
                new OrderItemProjection { Id = Guid.NewGuid(), Name = "Item 3" }
            };
            
            return orderItems;
        });

It works as expected.

Michel Floyd
  • 18,793
  • 4
  • 24
  • 39

0 Answers0