'GraphQL : Not Getting EF Related objects after implementing Types

For background, I am following the tutorial here: https://www.youtube.com/watch?v=HuN94qNwQmM .

As the code is too long I am putting that in git https://github.com/dikeshkumar135/CommandERGQL

Now, coming to the problem, when I am making request with this body

    query{
     platform{
       id,
       name,
       commands{
         howTo
       }
     }
    }

I am getting the data for platform with commands value as null and the below error:

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

If I remove the type it's working fine, but if I add type then the problem occurs to get related objects.



Solution 1:[1]

I downgraded hotchocolate packages from 12.0.1 to 11.0.8 ad it worked. It was a suggestion to my comment in youtube.

Solution 2:[2]

In HotChocolate v12, DependecyInjection included in the ResolverWith method assumes all parameters as an Argument. Except for below

There are also specific arguments that will be automatically populated by Hot Chocolate when the resolver is executed. These include Dependency injection services, DataLoaders, state, or even context like a parent value.

Documentation Source

Here is some example for the upgrade for the tutorial you are using

public IQueryable<Command> GetCommands(
    [Parent] Platform platform,
    [ScopedService] AppDbContext context)
{
    return context.Commands.Where(p => p.PlatformId == platform.Id);
}

Solution 3:[3]

if you don't have goal to update data, you can omit to use EF and use, just for exmaple, NReco.GraphQL to set up graphql schema (including relation between schema objects) via json-style definition. Setting db-connection quite easy and under the hood it's ORM.

Solution 4:[4]

Here is my Type class

 public class MajorType : ObjectType<Major>
    {
        protected override void Configure(IObjectTypeDescriptor<Major> descriptor)
        {
            descriptor.Description("Offer Degree from the university");
            descriptor.Field(p => p.MinCreditHours).Description("Minimum credit hours for the degree");
            descriptor.Field(p => p.SetUser).Ignore();
            descriptor.Field(p => p.SetDate).Ignore();
            descriptor.Field(p => p.IsDeleted).Ignore();
          
            descriptor.Field(p=>p.Courses)
                .UseDbContext<CatalogueDBContext>()
                .ResolveWith<Resolvers>(p=>p.GetCourse(default!,default!))
                .Description("Avialable coures for the specific major");
        }
        private class Resolvers 
        {
            public IQueryable<Courses> GetCourse([Parent] Major major, [ScopedService] CatalogueDBContext context)
            {
                return context.Courses.Where(c=>c.MajorId == major.Id);
            }
        }
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Dikesh Kumar
Solution 2 Riza Nafis
Solution 3 Dmitriy
Solution 4 Mostafiz