如何使用存储库模式在EF Core 3.0中进行并行异步查询?

问题描述 投票:0回答:1

我有类似的存储库

public interface IEmployeeRepository
{
  Task<EmployeeSettings> GetEmployeeSettings(int employeeId);
  Task<ICollection<DepartmentWorkPosition>> GetWorkPositions(int employeeId);
}

存储库的构造函数(DbContext注入):

public EmployeeRepository(EmployeeDbContext dbContext)
{
  _dbContext = dbContext;
}

并且在EF Core 2.0中称呼它,例如

var settingsTask = _employeeRepository
    .GetEmployeeSettings(employeeId.Value);

var workPositionsTask = _employeeRepository
    .GetWorkPositions(employeeId.Value);

await Task.WhenAll(settingsTask, workPositionsTask);

// do other things...

使用EF Core 3.0,存在InvalidOperationException:在上一个操作完成之前,在此上下文上启动了第二个操作...

DbContext在类似的ConfigureServices中注册

services.AddDbContext<EmployeeDbContext>(ServiceLifetime.Transient);

教程说:实体框架核心不支持在同一DbContext实例上运行的多个并行操作。

但是!如何在异步存储库中使用它?

repository-pattern ef-core-3.0
1个回答
0
投票
如何与异步存储库一起使用?

每个存储库只能同时发出一个异步请求。如果一次需要多个存储库,则需要多个存储库。这可能需要您将存储库

factory注入您的类型。

© www.soinside.com 2019 - 2024. All rights reserved.