AddDbContext или AddDbContextPool

Для приложений Asp.net Core, какой из них мы должны использовать? AddDbContext или AddDbContextPool? Согласно документации EF Core, AddDbContextPool обеспечивает высокую производительность, но стандартные шаблоны проектов Asp.net Core используют AddDbContext.

Ответы

Ответ 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, которые не должны совместно использоваться запросами, вам не следует их использовать. Я полагаю, что это довольно редко, поэтому объединение должно быть уместным в большинстве случаев.

Ответ 2

Между AddDbContext и AddDbContextPool есть следующие различия

  1. Мы можем использовать метод AddDbContext() или AddDbContextPool() для зарегистрировать наш класс приложения DbContext в ASP.NET Основная система внедрения зависимостей.
  2. Разница между AddDbContext() и AddDbContextPool() методы, метод AddDbContextPool() обеспечивает пул DbContext.
  3. При использовании пула DbContext экземпляр из пула DbContext предоставляется, если доступно, вместо создания нового экземпляра.
  4. Пул DbContext концептуально похож на пул соединений работает в ADO.NET. С точки зрения производительности AddDbContextPool() метод лучше, чем метод AddDbContext().
  5. AddDbContextPool() метод введен в ASP.NET Core 2.0. Так что если вы используете ASP.NET Core 2.0 или более позднюю версию AddDbContextPool() метод над AddDbContext() метод.