Благодаря ответу @ mm8 , если вы решили использовать внедрение зависимостей, вы можете выполнить следующие шаги.
Предположим, вы определили свой ReportDBContext
like это:
public class ReportDBContext : DbContext
{
public DbSet<Sample> Samples { get; set; }
//...
public ReportDBContext(DbContextOptions<ReportDBContext> options) : base(options)
{
//...
}
}
Итак, вам нужно настроить свой startup.cs
следующим образом:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//...What needed
services.AddDbContext<ReportDBContext>(options => options.UseSqlServer("Connection string to your DB"));
//...What needed
}
//...
}
Таким образом, вы можете легко ввести свой ReportDBContext
в свои классы, как это (например, ввести его на один из ваших контроллеров):
[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly ReportDBContext _dbContext;
public ValuesController(ReportDBContext dbContext )
{
_dbContext = dbContext;
}
//...
}
Вы можете просто ввести ReportDBContext
в свой BaseController
вместо того, чтобы вводить его также в каждый контроллер в вашем проекте.
Обновление 1
Если вы не хотите вставлять ReportDBContext
в каждый конструктор, вы можете создать свой BaseController
следующим образом, используя 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();
}
Подробнее здесь:
- https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext
- http://www.binaryintellect.net/articles/17ee0ba2-99bb-47f0-ab18-f4fc32f476f8.asp
Вы будете также необходимо установить как минимум эти два пакета NuGet:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityF rameworkCore.SqlServer (если поставщиком базы данных является Microsoft SQL Server)