我正在使用几个使用注入查询服务的数据加载器(这些服务又依赖于 DbContext)。它看起来像这样:
Field<ListGraphType<UserType>>(
"Users",
resolve: context =>
{
var loader = accessor.Context.GetOrAddBatchLoader<Guid, IEnumerable<User>>(
"MyUserLoader",
userQueryService.MyUserFunc);
return loader.LoadAsync(context.Source.UserId);
});
Field<ListGraphType<GroupType>>(
"Groups",
resolve: context =>
{
var loader = accessor.Context.GetOrAddBatchLoader<Guid, IEnumerable<Group>>(
"MyGroupLoader",
groupQueryService.MyGroupFunc);
return loader.LoadAsync(context.Source.GroupId);
});
当我运行同时使用两个数据加载器的嵌套查询时,我得到一个异常"A second operation started on this context before a previous asynchronous operation completed"
,因为两个数据加载器同时使用相同的 DbContext。
在查询中允许并发数据库访问而不必仔细管理 DbContexts 的最佳方法是什么ServiceLifeTime.Transient
?或者数据加载器可以公开一种知道何时处理瞬态 DbContexts 的方法吗?