Multiple Query Type in Graphql Hotchocolate

Viewed 125

I am using hot chocolate graphql. I have a scenario where I have two separate query type classes.

  1. PostQuery -> contains post related queries
  2. UserQuery -> contains user related queries

My Folder Structure

enter image description here

Here it is how I am configuring it

 .AddAuthorization()
    //for inmemory subscription
    .AddInMemorySubscriptions()
    .AddQueryType<PostQuery>()
    .AddQueryType<UserQuery>()
    .AddMutationType<Mutation>()
    .AddSubscriptionType<Subscription>()
    .AddGlobalObjectIdentification()
    // Registers the filter convention of MongoDB
    .AddMongoDbFiltering()
    // Registers the sorting convention of MongoDB
    .AddMongoDbSorting()
    // Registers the projection convention of MongoDB
    .AddMongoDbProjections()
    // Registers the paging providers of MongoDB
    .AddMongoDbPagingProviders();

However, i am getting the following error

System.ArgumentException: The root type `Query` has already been registered

Is there anyway it can be configured or else I have to places everything in a single class?

1 Answers

You need to register the querytype "Query" and add resolvers to handle multiple schemas of type "Query"

builder.Services
.AddQueryType(q => q.Name("Query"))
.AddType<PostQuery>()
.AddType<UserQuery>()

And in your query classes:

PostQuery.cs
[ExtendObjectType("Query")]
public List<Post> GetAllPosts()
{
    return List<Post>{...};
}

UserQuery.cs
[ExtendObjectType("Query")]
public List<User> GetAllUsers()
{
    return List<User>{...};
}
Related