gpt4 book ai didi

c# - ResolveWith 中的 DbContext,HotChocolate GraphQL

转载 作者:行者123 更新时间:2023-12-04 08:11:14 26 4
gpt4 key购买 nike

所以我刚刚开始,
我有一个实体,它不是通过直接关系而是通过保留 EntityId 和 EntityType(Enum) 来保存来自其他实体的数据。
当我从 GraphQL 读取这些记录时,我希望使用解析器解析一个字段,如下所示,

        public class AssignmentResolver
{
public object GetEntity( Assignment assignment, AppDbContext context)
{
if(assignment.EntityType == AssignmentEntityType.PERSON)
{
return context.People.FirstOrDefault(x => x.Id == assignment.EntityId);
}
// And more checks
return null;
}
}
那我可以说
    public class AssignmentQueryType: ObjectType<Assignment>
{
protected override void Configure(IObjectTypeDescriptor<Assignment> descriptor)
{
descriptor.Field("entity").ResolveWith<AssignmentResolver>(x => x.GetEntity(default!, default!));
}
}
我想知道这是正确的还是有更好的方法...
我的意思是更好的方法是为此使用文档数据库,但这不是现在的选择。
我也可能不放置 EntityType 和 EntityId 可以简单地设置与其他实体的实际关系,但我想看看这种当前的方式是否可行。

最佳答案

嗯,这很快。
我发现了我的问题。似乎在解析器中我不能只返回一个对象,因为在读取模式时应该是清晰的。
因此,如果我从解析器返回一个在所有这些实体之间共享的 View 模型,那么我们就可以开始了。
因此 GetEntity 代码将更改为

            public EntityViewModel GetEntity( Assignment assignment, [Service] AppDbContext context)
{
if(assignment.EntityType == AssignmentEntityType.PERSON)
{
var entity = context.People.FirstOrDefault(x => x.Id == assignment.EntityId);
return new EntityViewModel(entity);
}
// And more checks
return null;
}

关于c# - ResolveWith 中的 DbContext,HotChocolate GraphQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65951533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com