变量不能为非输入类型-GraphQL .Net约定

时间:2019-04-24 16:46:33

标签: c# ajax graphql

我使用conventions来实现graphql.net

我的模型定义如下。

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; }
    }

我正在尝试仅更新以上课程的名称。 使用上面的类(基本上是实体框架类的一种,但这与这个问题无关)

所以我对突变的定义如下。

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

我将这种突变称为如下。

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

作为回应,我遇到了以下错误。

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

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

在graphql.net公约的官方仓库中,我找到了一个示例,其中一个属性用于输入类型。使用后,它就可以工作了。

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

因此,它需要通过以下方式赋予属性某些东西。

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

        public string NewTitle { get; set; }
    }