For Asp.net Core apps, which one do we have to use?
AddDbContextPool? According to EF Core documentation,
AddDbContextPool provides high performance but the default Asp.net Core project templates use
The answer is here (under "DbContext pooling"): https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pooling
DbContext is not thread-safe. So you cannot reuse the same
DbContext object for multiple queries at the same time (weird things happen). The usual solution for this has been to just create a new
DbContext object each time you need one. That's what
However, there is nothing wrong with reusing a
DbContext object after a previous query has already completed. That's what
AddDbContextPool does. It keeps multiple
DbContext objects alive and gives you an unused one rather than creating a new one each time.
Which one you use is up to you. Both will work. Pooling has some performance gains. However the documentation warns that if you use any private properties in your
DbContext class that should not be shared between queries, then you should not use it. I imagine that's pretty rare though, so pooling should be appropriate in most cases.
There are the following differences between
AddDbContextPool()method to register our application specific DbContext class with the ASP.NET Core dependency injection system.
AddDbContextPool()method provides DbContext pooling.
AddDbContextPool()method is better over
AddDbContextPool()method is introduced in ASP.NET Core 2.0. So if you are using ASP.NET Core 2.0 or later use