早上好
我遇到了此错误,无法找到/了解我在Google和《星球大战》示例中看到的内容。这是我的设置。我认为您不需要查看模型,但如果可以,我可以发布。
public class IType : ObjectGraphType<IModel>
{
public IType()
{
Field(x => x.iD);
Field(x => x.fullName);
Field(x => x.email);
}
}
public class PType : ObjectGraphType<PModel>
{
public PType()
{
Field(x => x.PID);
Field(x => x.PValue);
Field<ListGraphType<SType>>("SKS");
}
}
public class SType : ObjectGraphType<SModel>
{
public SType()
{
Field(x => x.SID);
Field(x => x.Name);
}
}
现在,我创建了一个模型和一个类型,将上述所有内容组合到一个复杂的对象中。
public class IPModel
{
public string iD {get;set;}
public string fullName{get;set;}
public string email{get;set;}
public PModel PWS{get;set;}
}
public class PModel
{
public int id {get;set;}
public List<SModel> SKS{get;set;}=new List<SModel>();
}
public class IPType : ObjectGraphType<IPModel>
{
public IPType()
{
Field(x => x.iD);
Field(x => x.fullName);
Field(x => x.email);
Field<PModel>(x => x.PWS); //Error occurs resolving this type
}
}
我的错误出现在上面的注释行上。
内部异常System.ArgumentOutOfRangeException:类型:PModel无法有效地强制为GraphQL类型。
现在,我确定这不是错误,而是我所缺乏的知识/理解,因此,如果您可以发布文档/示例的链接以及关于我做错了什么的指示,我将不胜感激。
(交叉发布在这里:https://github.com/graphql-dotnet/graphql-dotnet/issues/1009#issue-408196708)
答案 0 :(得分:0)
免责声明:此方法有效,但不确定为什么以及是否是正确的解决方案。
出于某种原因,似乎无法通过lambda解析包含列表的 ANY 模型/类型。
.NET GraphQL程序集中的Field()具有以下签名。
#region Assembly GraphQL, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null
// GraphQL.dll
#endregion
public FieldType Field(Type type, string name, string description = null, QueryArguments arguments = null, Func<ResolveFieldContext<TSourceType>, object> resolve = null, string deprecationReason = null);
现在,这些参数是通过lamda表达式 EXCEPT 解析的,当涉及List / ListGraphType时,它将接缝,然后您必须显式指定参数。
注意PModel不是列表,但包含一个列表。
所以我将其更改为:
public class IPType : ObjectGraphType<IPModel>
{
public IPType()
{
Field(x => x.iD);
Field(x => x.fullName);
Field(x => x.email);
Field<PModel>("PWS"); //NOTE:replaced lamda above with string value for name
}
}
我交叉张贴到github graphql-dotner,并在那里找到了我更喜欢的解决方案。 信用:bogdancice
以这种方式尝试:Field(x => x.PWS,可为空:true,类型:typeof(PType));