I have graphql.net implementation using conventions

I have my model defined as below.

public partial class Project
    {
        public Project()
        {
            ProjectGroup = new HashSet<ProjectGroup>();
            ProjectUser = new HashSet<ProjectUser>();
            Datasource = new HashSet<Datasource>();
        }

        public int Id { get; set; }
        public string Name { get; set; }

        public virtual ICollection<ProjectGroup> ProjectGroup { get; set; }
        public virtual ICollection<ProjectUser> ProjectUser { get; set; }
        public virtual ICollection<Datasource> Datasource { get; set; }
    }

I am trying to update only name of above class. using above class (which is basically kind of entity framework class, but that is irrelevant of this question)

So I have defined mutation as below.

public sealed class Mutation
    {
        public async Task<Project> SaveProject([Inject] IProjectRepository projectRepository, projectModels.Master.Project project)
        {
            return Mapper.Map<Project>(await projectRepository.SaveProject(project));
        }
    }

and I am calling this mutation as below.

axios
                .post('https://localhost:44375/api/Graph', {
                    query: `mutation ($project: Project) {   
                                    saveProject(project: $project) {
                                    name
                                  }
                                }`,
                    variables: {
                        'project': { 'name' : data.label },
                    },
                })

In response I am getting below error.

{"errors":[{"message":"Variable \"project\" cannot be non-input type \"Project\".","locations":[{"line":1,"column":11}],"extensions":{"code":"VALIDATION_ERROR"}}]}

what am I doing wrong?

1 Answers

0
Anonymous Creator On Best Solutions

From graphql.net convention's official repo, I found one example and there was one attribute used for input type. After use of that it is working.

https://github.com/graphql-dotnet/conventions/blob/master/samples/DataLoaderWithEFCore/DataLoaderWithEFCore/GraphApi/Schema/InputTypes/UpdateMovieTitleParams.cs

So it requires attribute something in a following way.

[InputType]
    public class UpdateMovieTitleParams
    {
        public Guid Id { get; set; }

        public string NewTitle { get; set; }
    }