【发布时间】:2022-08-02 11:13:36
【问题描述】:
我正在将 EF Core 与 .NET Core 5 一起使用,并且有一个数据库连接,该连接将依赖项注入到我的不同控制器中。下面是通过ConfigureServices 创建数据库上下文的方式:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(opt =>
{
opt.UseMySql(Settings.Instance.SQLConnectionString, ServerVersion.AutoDetect(Settings.Instance.SQLConnectionString), b =>
{
b.UseNewtonsoftJson();
})
});
}
这很好用,但我已经意识到这个代码对每个被调用的 API 方法都运行,即使是那些不需要数据库上下文的方法。例如,这个控制器有一个空的构造函数并且没有使用数据库上下文,但仍然调用UseMySql:
[Produces(\"application/json\")]
[Route(\"client\")]
public class SimpleClientController : Controller
{
[HttpPost(\"GetTime\")]
public IActionResult GetTime([FromBody] GetTimeRequest request)
{
// return the current UTC server time
return Json(new GetTimeResponse()
{
Time = DateTime.UtcNow
});
}
}
一般来说,这没什么大不了的,但在最近的 us-east-2 AWS 中断期间突出显示了一些问题,这表明方法不要依赖数据库被缺少数据库连接阻塞。如果出现 redis 或 dynamodb 中断,我的 redis/dynamodb 方法不会遭受同样的命运,因为它们是通过单例服务处理的,并且仅由需要它们的方法懒惰地使用。
有没有办法对 EF Core 和数据库上下文做类似的事情?理想情况下,如果控制器必须使用上下文,我们只初始化 EF/数据库。
标签: c# asp.net entity-framework