I have a ConfigurationDbContext
that I am trying to use. It has multiple parameters, DbContextOptions
and ConfigurationStoreOptions
.
How can I add this DbContext to my services in ASP.NET Core?
I have attempted the following in my Startup.cs:
ConfigureServices
....
services.AddDbContext<ConfigurationDbContext>(BuildDbContext(connString));
....
private ConfigurationDbContext BuildDbContext(string connString)
{
var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();
builder.UseSqlServer(connString);
var options = builder.Options;
return new ConfigurationDbContext(options, new ConfigurationStoreOptions());
}
A DbContext instance represents a session with the database and can be used to query and save instances of your entities. DbContext is a combination of the Unit Of Work and Repository patterns. Entity Framework Core does not support multiple parallel operations being run on the same DbContext instance.
You can define a RepositoryConnection class in App. Data that acts as a wrapper to the Context and removes the need to reference EF in App. Web . If you are using an IoC Container you can control the lifetime of the RepositoryConnection class to ensure that all instances of Repository get the same Context.
This example registers a DbContext subclass called ApplicationDbContext as a scoped service in the ASP.NET Core application service provider (a.k.a. the dependency injection container). The context is configured to use the SQL Server database provider and will read the connection string from ASP.NET Core configuration.
You can use this in startup.cs.
Detail information : https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
Detail Example : Getting started with ASP.NET Core MVC and Entity Framework Core
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>options.
UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
AddDbContext
implementation just registers the context itself and its common dependencies in DI.
Instead of AddDbContext
call, it's perfectly legal to manually register your DbContext:
services.AddTransient<FooContext>();
Moreover, you could use a factory method to pass parameters (this is answering the question):
services.AddTransient<FooContext>(provider =>
{
//resolve another classes from DI
var anyOtherClass = provider.GetService<AnyOtherClass>();
//pass any parameters
return new FooContext(foo, bar);
});
P.S., In general, you don't have to register DbContextOptionsFactory
and default DbContextOptions
to resolve DbContext itself, but it could be necessary in specific cases.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With