C# 操作的空引用错误<;DbContextOptionsBuilder>;选择行动
我正在尝试将配置值从appsettings.json文件移动到SQL Server数据库中。我已经尝试了和链接,但无论以哪种方式运行OptionsAction,都会出现空引用错误。请尽可能提供帮助,并在下面找到我的代码: 组织配置来源: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;
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());
}
}