在 aspnetboilerplate 上使用热巧克力 Graphql

问题描述

我看到我们可以在 dotNetCore 上使用 Hot Chocolate 并且我通常使用它。

GraphQL/Query.cs

public class Query
{
    public IQueryable<TestTbl> GetList([Service] myDbContext context)
    {
        return context.TestTbl;
    }

}

这是我的startup.cs

ConfigureServices services.AddGraphQLServer().AddQueryType();

配置

app.UseEndpoints(endpoints =>
{
     endpoints.MapGraphQL();
}

但是当我调用这个查询时,我得到了这个错误

{
  "errors": [
    {
      "message": "Unexpected Execution Error","locations": [
        {
          "line": 2,"column": 3
        }
      ],"path": [
        "testTbl"
      ],"extensions": {
        "message": "Can't create component 'markaz.EntityFrameworkCore.markazDbContext' as it has dependencies to be satisfied.\r\n\r\n'markaz.EntityFrameworkCore.markazDbContext' is waiting for the following dependencies:\r\n- Service 'Microsoft.EntityFrameworkCore.DbContextOptions`1[[markaz.EntityFrameworkCore.markazDbContext,markaz.EntityFrameworkCore,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]' which was not registered.\r\n","stackTrace": "   at Castle.MicroKernel.Handlers.DefaultHandler.AssertNotWaitingForDependency()\r\n   at Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext context,Boolean requiresDecommission,Boolean instancerequired,Burden& burden)\r\n   at Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext context,Boolean instancerequired)\r\n   at Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler,Type service,Arguments additionalArguments,IReleasePolicy policy,Boolean ignoreParentContext)\r\n   at Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(Type service,Arguments arguments,Boolean ignoreParentContext)\r\n   at Castle.MicroKernel.DefaultKernel.Resolve(Type service,Arguments arguments)\r\n   at Castle.Windsor.MsDependencyInjection.ScopedWindsorServiceProvider.GetServiceInternal(Type serviceType,Boolean isOptional)\r\n   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetrequiredService[T](IServiceProvider provider)\r\n   at HotChocolate.Execution.Processing.MiddlewareContext.Service[T]()\r\n   at lambda_method1153(Closure,IResolverContext )\r\n   at HotChocolate.Types.FieldMiddlewareCompiler.<>c_displayClass3_0.<<CreateResolverMiddleware>b_0>d.MoveNext()\r\n--- End of stack trace from prevIoUs location ---\r\n   at HotChocolate.Execution.Processing.ResolverTask.ExecuteResolverPipelineAsync(CancellationToken cancellationToken)\r\n   at HotChocolate.Execution.Processing.ResolverTask.TryExecuteAsync(CancellationToken cancellationToken)"
      }
    }
  ],"data": {
    "testTbl": null
  }
}

知道我该怎么做吗?

解决方法

您需要设置数据库上下文。查看我们的教程,我们将引导您完成入门以及如何与 EF 集成。

https://github.com/ChilliCream/graphql-workshop