如何从CreateDbContext读取appsettings

时间:2019-09-26 11:12:10

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

我实现了 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。

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

然后在功能内构建配置。您可以设置应该从中加载设置的基本路径

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

找到了具有更多自定义功能的实用文章here