Configuring Dbcontext as Transient
In my opinion, a good use case for registering a DbContext
as a transient dependency is within worker services that are registered as singletons. You can not use scoped dependencies within singleton dependencies. So the only option you have is to register the DbContext as either singleton or transient. Something to bear in mind is that the injected DbContextOptions class lifetime also needs to be updated. You can do both by specifying the service lifetime as follows.
services.AddDbContext<DataContext>(options =>
{
options.UseMySQL(configurationRoot.GetConnectionString("DefaultConnection"));
options.UseLazyLoadingProxies();
}, ServiceLifetime.Transient, ServiceLifetime.Transient);
The third parameter is for the service lifetime of the DbContextOptions instance.
The lifetime is a parameter on AddDbContext<>()
. See example:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),
ServiceLifetime.Transient);
This will add it to the service collection with transient lifetime.