Ответ 1
Ответ здесь (в разделе "Объединение DbContext"): https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pooling
DbContext
не является потокобезопасным. Таким образом, вы не можете повторно использовать один и тот же объект DbContext
для нескольких запросов одновременно (происходят странные вещи). Обычным решением для этого было просто создать новый объект DbContext
каждый раз, когда он вам нужен. Это то, что делает AddDbContext
.
Однако нет ничего плохого в том, чтобы повторно использовать объект DbContext
после того, как предыдущий запрос уже завершен. Это то, что делает AddDbContextPool
. Он поддерживает работу нескольких объектов DbContext
и дает вам неиспользуемый объект вместо того, чтобы каждый раз создавать новый.
Какой из них вы используете, зависит от вас. Оба будут работать. Пул имеет некоторый прирост производительности. Однако документация предупреждает, что если вы используете какие-либо частные свойства в вашем классе DbContext
, которые не должны совместно использоваться запросами, вам не следует их использовать. Я полагаю, что это довольно редко, поэтому объединение должно быть уместным в большинстве случаев.