You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET使用Hot Chocolate 12.3.2搭建GraphQL API无schema加载问题求助

问题核心原因

你的配置存在两处关键问题导致Schema无法正常加载:

  1. 原始服务配置重复注册了两次GraphQL服务,第一次调用AddGraphQLServer后又额外调用了两次AddGraphQL,手动创建Schema的逻辑和Hot Chocolate默认的服务注册逻辑冲突,导致Schema没有正确生成。
  2. Query类中使用了静态的ApplicationContext实例,但你注册的是WeVoteContext的池化工厂,上下文类型不匹配,同时静态DbContext存在线程安全问题,也会干扰Schema的初始化扫描。

修复方案

1. 修正服务注册

完全移除重复的GraphQL注册逻辑,Hot Chocolate 12+ 只需要通过AddGraphQLServer链式配置即可,同时内置了DateOnly类型支持,不需要手动写类型转换器:

public void ConfigureServices(IServiceCollection services)
{
    // 注意这里要注册你实际使用的ApplicationContext,不要写错为WeVoteContext
    services.AddPooledDbContextFactory<ApplicationContext>(b => 
        b.UseInMemoryDatabase("Test"));
    
    services.AddGraphQLServer()
        .AddQueryType<Query>()
        // 启用内置DateOnly支持
        .AddDateOnlyType()
        .AddType<BillType>();
}

2. 修正Query类的DbContext使用

不要使用静态DbContext,改为通过构造函数注入上下文工厂,保证线程安全,同时匹配你注册的服务:

namespace Application
{
    public class Query
    {
        private readonly IDbContextFactory<ApplicationContext> _dbFactory;

        public Query(IDbContextFactory<ApplicationContext> dbFactory)
        {
            _dbFactory = dbFactory;
        }

        public IEnumerable<LegiscanModelBill> GetBills(int N)
        {
            using var context = _dbFactory.CreateDbContext();
            return context.LegiscanModelBills.Take(N).ToList();
        }
    }
}

3. 可选优化

如果你的BillType是空实现,完全可以删除这个类,Hot Chocolate会自动根据LegiscanModelBill的定义生成对应的GraphQL类型,不需要手动声明。


验证

启动项目后访问/graphql端点打开CakePop,点击界面上的刷新Schema按钮,即可正常看到所有查询字段和类型定义。

内容的提问来源于stack exchange,提问作者Antarr Byrd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:06