Как сделать параллельные асинхронные запросы в EF Core 3.0 с шаблоном хранилища? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть хранилище как

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);

В учебном пособии сказано следующее: Entity Framework Core не поддерживает несколько параллельных операций, выполняемых на одном и том же экземпляре DbContext.

Но!Как использовать его с репозиториями в async?

1 Ответ

0 голосов
/ 27 сентября 2019

Как использовать его с репозиториями в асинхронном режиме?

Вы можете иметь только один одновременный асинхронный запрос на репозиторий.Если вам нужно иметь более одного одновременно, вам нужно более одного хранилища.Это может потребовать от вас внедрения репозитория factory в ваши типы.

...