- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
从 .NET Core 2.0 升级到 .NET Core 2.1
错误WebHostBuilder 只允许创建单个 WebHost 实例
程序.cs
namespace WebApp1
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args)
.MigrateDbContext<ApplicationDbContext>((context, services) =>
{
var env = services.GetService<IHostingEnvironment>();
var logger = services.GetService<ILogger<ApplicationDbContextSeed>>();
new ApplicationDbContextSeed()
.SeedAsync(context, env, logger)
.Wait();
}).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.ConfigureAppConfiguration((builderContext, config) =>
{
config.AddEnvironmentVariables();
});
}
}
IWebHostExtensions.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
namespace Microsoft.AspNetCore.Hosting
{
public static class IWebHostExtensions
{
public static IWebHostBuilder MigrateDbContext<TContext>(this IWebHostBuilder webHost, Action<TContext, IServiceProvider> seeder) where TContext : DbContext
{
using (var scope = webHost.Build().Services.CreateScope())
{
var services = scope.ServiceProvider;
var logger = services.GetRequiredService<ILogger<TContext>>();
var context = services.GetService<TContext>();
try
{
logger.LogInformation($"Migrating database associated with context {typeof(TContext).Name}");
context.Database
.Migrate();
seeder(context, services);
logger.LogInformation($"Migrated database associated with context {typeof(TContext).Name}");
}
catch (Exception ex)
{
logger.LogError(ex, $"An error occurred while migrating the database used on context {typeof(TContext).Name}");
}
}
return webHost;
}
}
}
来源:
最佳答案
您在构建器上多次调用 .Build()
。
首先在扩展中
public static class IWebHostExtensions
{
public static IWebHostBuilder MigrateDbContext<TContext>(this IWebHostBuilder webHost, Action<TContext, IServiceProvider> seeder) where TContext : DbContext
{
using (var scope = webHost.Build().Services.CreateScope()) //<-- HERE
{
//...
然后在 Main
中再次
CreateWebHostBuilder(args)
.MigrateDbContext<ApplicationDbContext>((context, services) =>
{
var env = services.GetService<IHostingEnvironment>();
var logger = services.GetService<ILogger<ApplicationDbContextSeed>>();
new ApplicationDbContextSeed()
.SeedAsync(context, env, logger)
.Wait();
}).Build().Run(); //<-- HERE
链接示例使用主机而不是构建器来执行迁移。
重构您的扩展,类似于链接示例的扩展
public static class IWebHostExtensions {
public static IWebHost MigrateDbContext<TContext>(this IWebHost webHost, Action<TContext, IServiceProvider> seeder)
where TContext : DbContext {
using (var scope = webHost.Services.CreateScope()) {
var services = scope.ServiceProvider;
var logger = services.GetRequiredService<ILogger<TContext>>();
var context = services.GetService<TContext>();
try {
logger.LogInformation($"Migrating database associated with context {typeof(TContext).Name}");
context.Database
.Migrate();
seeder(context, services);
logger.LogInformation($"Migrated database associated with context {typeof(TContext).Name}");
} catch (Exception ex) {
logger.LogError(ex, $"An error occurred while migrating the database used on context {typeof(TContext).Name}");
}
}
return webHost;
}
}
并在构建 Web 主机后调用它。
public class Program {
public static void Main(string[] args) {
BuildWebHost(args)
.MigrateDbContext<ApplicationDbContext>((context, services) => {
var env = services.GetService<IHostingEnvironment>();
var logger = services.GetService<ILogger<ApplicationDbContextSeed>>();
new ApplicationDbContextSeed()
.SeedAsync(context, env, logger)
.Wait();
})
.Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.ConfigureAppConfiguration((builderContext, config) => {
config.AddEnvironmentVariables();
})
.Build();
}
关于c# - 错误 WebHostBuilder 只允许创建 WebHost 的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51056425/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this q
在 docs.microsoft 上的以下帖子的帮助下,我正在从 ASP.NET Core 1.x 迁移到 v2.0: https://learn.microsoft.com/en-us/aspnet
虚拟主机服务,提供一种既便宜又简单的方式,使企业或个人在网路上尽情展示自己公司的形象、产品。您不但能马上拥有专属的独立网址,又能省下单独承受购买网路伺服器、专线架设及资讯工程人员等庞大成本。透过虚拟
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我在负载均衡器后面部署了一个 WCF 服务,当我尝试使用 SOAP 访问它时,它工作得很好,但是当我尝试通过 REST url 访问它时,我收到下面提到的错误。 这是我尝试通过 https://dev
在本地主机上这效果很好。但是当我将文件上传到服务器时,我收到此错误: 警告:mysql_num_rows():提供的参数不是第 54 行/storage/content/04/13fd39104/xx
我现在花了很多时间来配置我的代理。目前,我使用一项名为 proxybonanza 的服务。他们为我提供了一个代理,我用它来获取网页。 我正在使用 HTMLAGILITYPACK 现在,如果我在没有代理
我使用免费的虚拟主机 000webhost。该服务还可以,但它会在每个文件和请求中插入一些 javascript 计数器。脚本如下所示。 如果我做一个 jquery post 它会破坏我的代码
在我的 Program.cs Main 方法中,我想读取 user secrets ,配置记录器,然后构建 WebHost。 public static Main(string[] args) {
我经常使用 WebHost.CreateDefaultBuilder(args) 在我的 ASP.NET Core 应用程序上启动我的 kestrel 服务器,args 从命令行获取。我无法在任何地方
将 MVC 网页部署到我的 IIS 后,出现以下错误: Could not load file or assembly 'System.Web.Http.WebHost, Version=4.0.0.
尝试关注@matthoneycutt的tutorial on Azure IoT Hub这好像是Microsoft.Azure.WebHosts.JobHostConfiguration 在 3.0.
我仍在寻找可用于我的虚拟主机提供商服务器 (one.com) 的搜索引擎,但仍未找到。 我听说 Sphinx 很棒,运行它有哪些要求? 说明书看了,不多说了,感觉应该可以吧...只是想先请教专业人士。
我正在寻找一种方法来显示从虚拟主机到 Windows 边栏小工具的信息列表。我可以看到一个使用 iframe 的解决方案,但我知道实际使用它并不是一个聪明的主意。我读过有一种方法可以使用某种 java
从 .NET Core 2.0 升级到 .NET Core 2.1 错误WebHostBuilder 只允许创建单个 WebHost 实例 程序.cs namespace WebApp1 {
我只是想了解 webapi、webhost (iis) 和 owin 之间的关系。我把我目前的理解写下来,请大家告诉我是否正确。 Webapi,与 MVC 不同,是以独立于主机的方式编写的。那是在欧文
我有一个 ASP.NET Core 应用程序,我想在其中隐藏启动应用程序时显示的控制台行(因为我有自己的欢迎消息) Hosting environment: Development Content r
我使用 Code Ignitor 和 MySQL 创建了一个网站,并希望将所有内容上传到 000webhost.com 我该怎么办: 将我的模型、 View 和 Controller 上传到 000w
如描述所述,由于某种原因,解决方案突然找不到 System.Web.Http.WebHost。 最佳答案 通过安装 NuGet Microsoft.AspNet.WebApi.WebHost 解决了这
我是一名优秀的程序员,十分优秀!