在启动时访问 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 sqlite3报错 "System.Data.Entity.Core.EntityException: 在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。