0

我正在尝试将我的配置值从我的 appsettings.json 文件移动到我的 SQL Server 数据库中。我已经尝试了这个这个链接,但是当它以任何一种方式运行 OptionsAction 时,我仍然得到一个空引用错误。请以任何可能的方式提供帮助,并在下面找到我的代码:

组织配置来源:

public class OrgConfigurationSource : IConfigurationSource
{
    public Action<DbContextOptionsBuilder> OptionsAction { get; set; }
    public bool ReloadOnChange { get; set; }
    public int ReloadDelay { get; set; } = 500;

    public IConfigurationProvider Build(IConfigurationBuilder builder)
    {
        return new OrgConfigurationProvider(this);
    }

组织配置提供者:

public class OrgConfigurationProvider : ConfigurationProvider
{
    private readonly OrgConfigurationSource source;

    public OrgConfigurationProvider(OrgConfigurationSource source)
    {
        this.source = source;
    }

    public override void Load()
    {
        var builder = new DbContextOptionsBuilder<StorageContext>();
        source.OptionsAction(builder);

        using (var context = new StorageContext(builder.Options))
        {
            context.Database.EnsureCreated();
            var config = context.ConfigurationValues.SingleOrDefault();
            if (config == null) return;

            Data = new Dictionary<string, string>();
            Data.Add($"{nameof(OrgConfigurationValue)}.{nameof(OrgConfigurationValue.Name)}", config.Name);
        }
    }

程序.cs:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureLogging( l => l.AddConsole())
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddOrgConfiguration();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {             
            webBuilder.UseStartup<Startup>();
        });
}

实体框架扩展:

public static class EntityFrameworkExtensions
{
    public static IConfigurationBuilder AddOrgConfiguration(this IConfigurationBuilder builder)
    {
        return builder.Add(new OrgConfigurationSource());
    }
}
4

0 回答 0