为了学习,我正在尝试进行社交登录。
我使用例如https://tecknoworks.com/how-to-integrate-social-login-in-a-web-api-solution/以下示例,在执行Add-Migration InitialCreate时无法创建迁移
“无法创建类型为'AppDbContext'的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728》
在搜索找到建议以在其上使用add-migration initial -verbose时出现错误
“访问Microsoft.Extensions.Hosting服务时遇到意外的返回类型。方法'CreateHostBuilder(string [])'应该返回类型为'IHostBuilder'的对象。无需应用程序服务提供商就可以继续。”
public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger<Program>();
try
{
var environment = services.GetRequiredService<IWebHostEnvironment>();
if (environment.IsDevelopment())
{
var context = services.GetRequiredService<Infrastructure.AppDbContext>();
MigrateDatabaseToLatestVersion.ExecuteAsync(context).Wait();
}
}
catch (AppException ex)
{
logger.LogError(ex, "An error occurred creating/updating the DB.");
}
}
host.Run();
}
private static IWebHost CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
代码AppDbContext
public class AppDbContext : IdentityDbContext<AppUser>
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<AppUser>(entity => { entity.ToTable(name: "tr_Users"); });
builder.Entity<IdentityRole>(entity => { entity.ToTable(name: "tr_Roles"); });
builder.Entity<IdentityUserRole<string>>(entity => { entity.ToTable("tr_UserRoles"); });
builder.Entity<IdentityUserClaim<string>>(entity => { entity.ToTable("tr_UserClaims"); });
builder.Entity<IdentityUserLogin<string>>(entity => { entity.ToTable("tr_UserLogins"); });
builder.Entity<IdentityUserToken<string>>(entity => { entity.ToTable("tr_UserTokens"); });
builder.Entity<IdentityRoleClaim<string>>(entity => { entity.ToTable("tr_RoleClaims"); });
builder.ApplyConfiguration(new AppUserConfiguration());
}
}
配置服务
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
ConfigureSwagger(services);
services.AddDbContext<AppDbContext>(it =>
{
it.UseSqlServer(Configuration["Database:ConnectionString"]);
},
ServiceLifetime.Transient
);
CreateIdentityIfNotCreated(services);
ConfigureAuthenticationSettings(services);
services.AddScoped<IUserService, UserService>();
services.AddMvc(options => options.RespectBrowserAcceptHeader = true);
}
在数据库表[__EFMigrationsHistory]中创建
您需要更改IWebHost CreateWebHostBuilder
方法以返回IHostBuilder
(并Main
相应地),在您的情况下,它将类似于以下内容:
public static IHostBuilder CreateWebHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
.....
host.Run();
}
另外,我已经更改CreateWebHostBuilder
为使用,Host
而不是使用“从ASP.NET Core 2.2迁移到3.0”文档中WebHost
编写的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句