c# - 如何从 CreateDbContext 读取 appsettings
问题描述
我实现IDesignTimeDbContextFactory以使用 EF 迁移,我需要从CreateDbContext方法读取 appsettings.json 文件。
问题是 appsettings.json 位于另一个程序集中。
public DataContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<DataContext>();
var connectionString = _configuration.GetConnectionString("Database:ConnectionString");
builder.UseSqlServer(connectionString, option =>
{
option.MigrationsAssembly("MyDbContextAssembly");
});
return new DataContext(builder.Options);
}
在这个类上,我需要无参数构造函数,我不能注入 IConfiguration。
如何解决这个问题?
解决方案
然后在函数内构建配置。您可以将基本路径设置为应从中加载设置的位置
public DataContext CreateDbContext(string[] args) {
// Build config
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../Relative path here"))
.AddJsonFile("appsettings.json")
.Build();
// Get connection string
var builder = new DbContextOptionsBuilder<DataContext>();
var connectionString = configuration .GetConnectionString("Database:ConnectionString");
builder.UseSqlServer(connectionString, option =>
{
option.MigrationsAssembly("MyDbContextAssembly");
});
return new DataContext(builder.Options);
}
在这里找到了一篇有更多自定义的有用文章。
推荐阅读
- ruby-on-rails - 从rails中的某个id开始删除所有记录?
- java - Http 重定向可以在没有浏览器的情况下工作吗?
- sql - 表达式“column_name”既不存在于 group by 中,也不是聚合函数
- typescript - 如何在反应原生的嵌套堆栈导航中添加标题上的按钮
- acumatica - Acumatica 从菜单中隐藏分支查找
- python - Selenium,熊猫将同一张表写入多个 CSV
- google-chrome-devtools - 在 Chrome 开发者工具中限制控制台输出的数量
- node.js - Node.js POST 请求中的批处理
- ios - 按标题字符串自定义排序部分
- matlab - 配置 Octave 避免自动 endfor、endif 自动完成