Action <DbContextOptionsBuilder> OptionsAction的空引用错误

问题描述

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

OrgConfigurationSource:

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

OrgConfigurationProvider:

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

Program.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>();
        });
}

EntityFrameworkExtensions:

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)