Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操作的空引用错误<;DbContextOptionsBuilder>;选择行动_C#_Configuration_Dbcontext_Custom Configuration - Fatal编程技术网

C# 操作的空引用错误<;DbContextOptionsBuilder>;选择行动

C# 操作的空引用错误<;DbContextOptionsBuilder>;选择行动,c#,configuration,dbcontext,custom-configuration,C#,Configuration,Dbcontext,Custom Configuration,我正在尝试将配置值从appsettings.json文件移动到SQL Server数据库中。我已经尝试了和链接,但无论以哪种方式运行OptionsAction,都会出现空引用错误。请尽可能提供帮助,并在下面找到我的代码: 组织配置来源: public class OrgConfigurationSource : IConfigurationSource { public Action<DbContextOptionsBuilder> OptionsAction { get;

我正在尝试将配置值从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 Action options Action{get;set;}
。您需要编写
source?.OptionsAction?.Invoke(生成器)@OlivierRogier谢谢你。我确实知道空引用异常是什么,并且需要实例化对象,但我对配置还不熟悉,因此optionAction和DbContextBuilder对我来说仍然有点混乱。我确实试过这一行,但不幸的是我仍然得到了同样的错误。您是编写代码还是数据库优先实体框架模型?首先,对于代码,我推荐这本小而有效的书。我希望这能帮助你享受C代码:。
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);
        }
    }
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());
    }
}