Null reference error for Action<DbContextOptionsBuilder> OptionsAction

187 Views Asked by At

I am trying to move my configuration values from my appsettings.json file into my SQL Server database. I have tried both this and this link but I am still getting a null reference error when it runs for OptionsAction either way. Please assist in any way possible and find my code below:

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

There are 0 best solutions below