【问题标题】:EC Core Lazy Database ConnectionEC Core 惰性数据库连接
【发布时间】: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


    【解决方案1】:

    看起来我的问题实际上与自动版本检测有关,它正在创建与 MySQL 的连接每一次检测版本。我现在已经缓存了版本,它似乎已经解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2018-07-16
      • 2017-05-18
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多