我正在尝试使用2个(或更多)异步子查询执行查询。遗憾的是,这是不可能的,因为DbContext
当时只能处理1个请求。
该项目正在使用:
错误
在先前的操作完成之前,第二个操作在此上下文上开始。这通常是由使用相同DbContext实例的不同线程引起的。
类型:
Field<ListGraphType<A>>()
.Name("A")
.Description("query of A")
.ResolveAsync(async context =>
await repro.GetAllAAsync(context)
);
Field<ListGraphType<A>>()
.Name("B")
.Description("query of B")
.ResolveAsync(async context =>
await repro.GetAllBAsync(context)
);
查询:
query {
A {
id
}
B {
id
}
}
DbContextPool
不能解决问题,我也不想使用StructureMap。
是否有一种优雅的使用方式
答案 0 :(得分:-1)
我最近创建了一个解决EF并行执行的项目。 您可以在这里看到实现
https://github.com/fenomeno83/graphql-dotnet-globalization-demo
在这里,您可以找到一个查询示例:
public class TestGroupQueries : ObjectGraphType
{
public TestGroupQueries(IHttpContextAccessor _httpContextAccessor)
{
Name = "testQueries";
FieldAsync<TestResponseType>(
"demoQuery",
arguments: new QueryArguments(new QueryArgument<NonNullGraphType<IntGraphType>> { Name = "input" }),
resolve: async context =>
{
//extension method that creates scope (IServiceScope) from IServiceProvider
using (var scope = _httpContextAccessor.CreateScope())
{
//call DemoQuery method of TestService; GetService is an extension method that use GetRequiredService from scope serviceprovider
return await scope.GetService<ITestService>().DemoQuery(context.GetArgument<int>("input"));
}
});
}
您在解析器内部创建一个新范围并使用该范围的服务