der*_*cki 4 c# entity-framework-core asp.net-core asp.net-core-2.0 asp-net-core-spa-services
工具: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();
Run Code Online (Sandbox Code Playgroud)
为了加载连接字符串,我在 ConfigureServices (startup.cs) 中有以下代码:
Action<DbContextOptionsBuilder> optionsAction = options =>
options.UseSqlServer(Configuration.GetConnectionString("RecipeDatabase"));
services.AddDbContext<RecipeContext>(optionsAction);
Run Code Online (Sandbox Code Playgroud)
使用上述配置,应用程序在调试模式和作为 Windows 服务(发布后)运行时没有问题。
但是,如果我运行 add-migration,该工具将无法从 appsettings.json 加载连接字符串:
如果我像这样评论以下行
//.UseContentRoot(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName))
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2458 次 |
| 最近记录: |