在启动时访问 EF Core 数据库以设置依赖注入的常量值

Posted

技术标签:

【中文标题】在启动时访问 EF Core 数据库以设置依赖注入的常量值【英文标题】:Accessing EF Core Database on Startup to set constant values for Dependency Injection 【发布时间】:2022-01-06 11:20:20 【问题描述】:

我在数据库中有一组常量值。理想情况下,我想在启动期间阅读它们一次,以节省每次返回数据库。目前有 EF Core,通常会传入 IDbContext。一开始我有:

services.AddScoped<IDatabaseConstants,DatabaseConstants>();

那么我的常量类将是

public DatabaseConstants : IDatabaseConstants
    private int _value;
    public DatabaseConstants(IDbContext dbContext)
    
        _value = dbContext.Table.Where( .... 
    

    public int GetConstantValue() => _value;

但由于它的作用域,每次我调用 GetConstantValue() 时它都会从数据库中读取。

我想我的 DependencyInjection.cs

中需要这样的东西
services.AddSingelton<IDatabaseConstants>(new DatabaseConstants());

那么我的常量类将是

public DatabaseConstants : IDatabaseConstants
    private int _value;
    public DatabaseConstants()
    
        _value = ReadFromDatabase();
    

    public int GetConstantValue() => _value;

问题是我不确定如何使用此设置访问我的数据库。

是否存在在启动时从数据库读取的模式?

【问题讨论】:

看看IServiceScopFactory 【参考方案1】:

不要在常量类中实例化上下文,而是在应用加载时仅调用一次的配置类中实例化它。向您的 DatabaseConstants 类添加一个方法以加载数据,并将上下文作为参数,并从配置类中调用该方法。

【讨论】:

以上是关于在启动时访问 EF Core 数据库以设置依赖注入的常量值的主要内容,如果未能解决你的问题,请参考以下文章

我可以将依赖项注入迁移(使用 EF-Core 代码优先迁移)吗?

在 asp.net Core 中配置服务注册时的依赖注入访问 (3+)

在 ASP.NET Core 中使用 DbContext 注入并行 EF Core 查询

跨项目的 EF Core 数据上下文注入

EF sqlite3报错 "System.Data.Entity.Core.EntityException: 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。

ASP - 在启动时核心迁移 EF Core SQL DB