Контекстный пул: вторая операция, запущенная в этом контексте до завершения предыдущей операции

#c# #entity-framework-core #dbcontext

#c# #entity-framework-core #dbcontext

Вопрос:

Я сталкиваюсь со следующей проблемой при выполнении нескольких запросов к de db. Использование Adddbcontext работает нормально, но когда я использую adddbcontextpool, у меня возникает следующая ошибка

Система.Исключение InvalidOperationException: вторая операция, запущенная в этом контексте до завершения предыдущей операции. Обычно это вызвано тем, что разные потоки используют один и тот же экземпляр DbContext. Для получения дополнительной информации о том, как избежать проблем с потоковой обработкой с помощью DbContext, см. https://go.microsoft.com/fwlink/?linkid=2097913

при запуске у меня есть эта конфигурация.

 services.AddDbContextPool<context>(options => 
   options.UseSqlServer(Configuration.GetConnectionString("context")));
 

и в моей службе у меня есть следующая строка, которая вызывается несколько раз.

 var maxEffectiveDate = await context.Transactions.MaxAsync(x => x.EffectiveDate);
 

я использую EF core 3.1.9

С уважением

Комментарии:

1. Добро пожаловать в Stackoverflow! Как вы думаете, MaxAsync имеет к этому какое-то отношение?

2. Обычно у вас может возникнуть эта ошибка, когда вы забыли поместить await в другое место или при использовании Task.WhenAll . Точно проверяйте свой код. Один DbContext на поток.

3. @SvyatoslavDanyliv как я могу исправить проблему при использовании whenall?

4. Каждая задача, переданная в WhenAll list, должна иметь свою собственную DbContext .