gpt4 book ai didi

c# - 由于 appsettings.json 的路径,添加迁移无法从文件 appsettings.json 读取连接字符串

转载 作者:行者123 更新时间:2023-11-30 15:16:26 28 4
gpt4 key购买 nike

工具:VS2017、ASP.NET Core 2、Entity Framework Core 2、ASP.NET Core JavaScript 服务

我正在使用以下 BuildWebHost 方法:

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName))
.UseStartup<Startup>()
.UseNLog()
.Build();

为了加载连接字符串,我在 ConfigureServices (startup.cs) 中有以下代码:

Action<DbContextOptionsBuilder> optionsAction = options =>
options.UseSqlServer(Configuration.GetConnectionString("RecipeDatabase"));
services.AddDbContext<RecipeContext>(optionsAction);

通过上述配置,应用程序可以在 Debug模式下和作为 Windows 服务(发布后)正常运行。

但是如果我运行 add-migration,该工具无法从 appsettings.json 加载连接字符串:

enter image description here

如果我这样评论下一行

//.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName))

add-migration 运行没有问题,但应用程序作为“Windows 服务”运行并不是因为它找不到 appsettings.json 文件。

如何修改配置,以便不再需要注释上面的行?

谢谢。

迈克尔

最佳答案

您可能想要覆盖 DbContext 中的 OnConfiguring 方法。这是我正在使用的示例。只要您使用命令行或 Windows 服务,它就会起作用:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured)
{
base.OnConfiguring(optionsBuilder);
return;
}

string pathToContentRoot = Directory.GetCurrentDirectory();
string json = Path.Combine(pathToContentRoot, "appsettings.json");

if (!File.Exists(json))
{
string pathToExe = Process.GetCurrentProcess().MainModule.FileName;
pathToContentRoot = Path.GetDirectoryName(pathToExe);
}

IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(pathToContentRoot)
.AddJsonFile("appsettings.json");

IConfiguration configuration = configurationBuilder.Build();

optionsBuilder.UseSqlServer(configuration.GetConnectionString("RecipeDatabase"));

base.OnConfiguring(optionsBuilder);
}

关于c# - 由于 appsettings.json 的路径,添加迁移无法从文件 appsettings.json 读取连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49476494/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com