Thanks to @mm8's answer, if you decided to use dependency injection, then you can follow the below mentioned steps.
Suppose that you have defined your ReportDBContext
like this:
public class ReportDBContext : DbContext
{
public DbSet<Sample> Samples { get; set; }
//...
public ReportDBContext(DbContextOptions<ReportDBContext> options) : base(options)
{
//...
}
}
So you need to config your startup.cs
like this:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//...What needed
services.AddDbContext<ReportDBContext>(options => options.UseSqlServer("Connection string to your DB"));
//...What needed
}
//...
}
So you can easily inject your ReportDBContext
to your classes like this(for example inject it to one of your controllers):
[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly ReportDBContext _dbContext;
public ValuesController(ReportDBContext dbContext )
{
_dbContext = dbContext;
}
//...
}
You can simply inject the ReportDBContext
to your BaseController
instead of injecting it to every controller in your project too.
Update 1
If you do not want to inject the ReportDBContext
into each constructor, then you can design your BaseController
as follow by using HttpContext.RequestServices:
public class BaseController : Controller
{
protected ReportDBContext DbContext => (ReportDBContext)HttpContext.RequestServices.GetService(typeof(ReportDBContext));
//...
}
[Route("api/[controller]")]
public class ValuesController : BaseController
{
//...
[HttpGet]
public List<Sample> Get() => DbContext.Samples.ToList();
}
Read more here:
- https://learn.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
- http://www.binaryintellect.net/articles/17ee0ba2-99bb-47f0-ab18-f4fc32f476f8.asp
You will need to install at least these two NuGet packages too:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.SqlServer (If the database provider is Microsoft SQL Server)