Phase 26 of 30 · Topic 26.5

`DbContextPool` Connection & Object Pooling

1Concept

Creating a new `DbContext` per HTTP request involves object instantiation and state initialization. `AddDbContextPool` pools reusable `DbContext` instances, recycling them after each request.

2Architecture Diagram

HTTP Request Starts ──> Rents clean DbContext from DbContextPool
                                │
HTTP Request Ends   ──> Resets state & returns DbContext to pool (Zero GC Allocations!)

3Code Example

C# 13 & .NET 9
using System;

public class DbContextPoolConceptDemo
{
    public static void Main()
    {
        Console.WriteLine("DbContext Pooling setup:");
        Console.WriteLine("builder.Services.AddDbContextPool<AppDbContext>(options => {");
        Console.WriteLine("    options.UseNpgsql(connectionString);");
        Console.WriteLine("}, poolSize: 128);");
    }
}

4Expected Output

DbContext Pooling setup:
builder.Services.AddDbContextPool<AppDbContext>(options => {
    options.UseNpgsql(connectionString);
}, poolSize: 128);

5Key Takeaways

  • Use `AddDbContextPool` instead of `AddDbContext` for high-load web APIs.
  • DbContext state (ChangeTracker) is reset automatically when returned to the pool.
  • Do not store custom state fields inside pooled DbContext classes.