首页 > 解决方案 > 如何从 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。

如何解决这个问题?

标签: c#.net-coreentity-framework-core

解决方案


然后在函数内构建配置。您可以将基本路径设置为应从中加载设置的位置

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);
}

在这里找到了一篇有更多自定义的有用文章。


推荐阅读