c# - ResolveWith、HotChocolate GraphQL 中的 DbContext

标签 c# graphql entity-framework-core hotchocolate

所以我才刚刚开始, 我有一个实体,它不是通过直接关系而是通过保留 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,而是简单地设置与其他实体的实际关系,但我想看看当前的方式是否可行。

最佳答案

嗯,速度很快。

我发现了我的问题。看来在解析器中我不能只返回一个对象,因为读取时模式应该是清晰的。

因此,如果我从解析器返回一个在所有这些实体之间共享的 viewModel,那么我们就可以开始了。

因此 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、HotChocolate GraphQL 中的 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65951533/

相关文章:

C# - 第二个参数等于字符串长度的字符串 IndexOf 方法

c# - 学习单声道源代码

javascript - 是否可以忽略 graphql 中与 @include 一起使用的所需类型

c# - 无法使用 efcore 创建可为空的外键

c# - 尝试为 StudentId=1 获取 "Grade"时出错

c# - 统一处理非托管 API 中的错误代码

c# - 多次比较字符串

javascript - 由于 id 冲突,Relay QueryRendererfragmentContainer 传递的 props 与服务器响应不同

graphql - 如何订阅relay/graphql突变的进度事件

c# - 如何使用 Entity Framework Core 1.1 实现自引用多对多关系?