Для приложений Asp.net Core, какой из них мы должны использовать? AddDbContext
или AddDbContextPool
? Согласно документации EF Core, AddDbContextPool
обеспечивает высокую производительность, но стандартные шаблоны проектов Asp.net Core используют AddDbContext
.
AddDbContext или AddDbContextPool
Ответ 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
есть следующие различия
- Мы можем использовать метод
AddDbContext()
илиAddDbContextPool()
для зарегистрировать наш класс приложения DbContext в ASP.NET Основная система внедрения зависимостей. - Разница между
AddDbContext()
иAddDbContextPool()
методы, методAddDbContextPool()
обеспечивает пул DbContext. - При использовании пула DbContext экземпляр из пула DbContext предоставляется, если доступно, вместо создания нового экземпляра.
- Пул DbContext концептуально похож на пул соединений
работает в ADO.NET. С точки зрения производительности
AddDbContextPool()
метод лучше, чем методAddDbContext()
. AddDbContextPool()
метод введен в ASP.NET Core 2.0. Так что если вы используете ASP.NET Core 2.0 или более позднюю версиюAddDbContextPool()
метод надAddDbContext()
метод.