gpt4 book ai didi

asp.net - 在类 'BuildWebHost' 上调用方法 'Program' 时出错

转载 作者:行者123 更新时间:2023-12-04 12:45:45 26 4
gpt4 key购买 nike

当我运行 dotnet ef migrations add Initial_Identity 时,出现了这个错误:

An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: GenericArguments1, 'Microsoft.AspNetCore.Identity.IdentityRole', on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]' violates the constraint of type 'TRole'. An operation was scaffolded that may result in the loss of data. Please review the migration for accuracy.

我该如何解决?

这是我的代码:

启动类:

public void ConfigureServices(IServiceCollection services)
{
// some codes
services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
}

程序类:

public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseDefaultServiceProvider(options => options.ValidateScopes = false)
.Build();
}

TemporaryDbContextFactory 类:

public class TemporaryDbContextFactory : 
IDesignTimeDbContextFactory<ApplicationDbContext>
{
////////
public ApplicationDbContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();

builder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
return new ApplicationDbContext(builder.Options);
}
}

ApplicationDbContext 类:

public class ApplicationDbContext : IdentityDbContext<User, CustomRole, int,   CustomUserClaim, CustomUserRole, CustomUserLogin, CustomRoleClaim,   CustomUserToken>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{

}

// some codes
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CustomUserLogin>().HasKey(a => new { a.UserId });
modelBuilder.Entity<CustomUserRole>().HasKey(a => new { a.RoleId, a.UserId });
modelBuilder.Entity<CustomUserToken>().HasKey(a => new { a.UserId});
}

// some codes

modelBuilder.Entity<User>().ToTable("User");
modelBuilder.Entity<CustomRole>().ToTable("Role");
modelBuilder.Entity<CustomRoleClaim>().ToTable("RoleClaim");
modelBuilder.Entity<CustomUserClaim>().ToTable("UserClaim");
modelBuilder.Entity<CustomUserLogin>().ToTable("UserLogin");
modelBuilder.Entity<CustomUserRole>().ToTable("UserRole");
modelBuilder.Entity<CustomUserToken>().ToTable("UserToken");

}

与身份相关:

public class CustomUserLogin : IdentityUserLogin<int> { }
public class CustomUserRole : IdentityUserRole<int> { }
public class CustomUserToken : IdentityUserToken<int> { }
public class CustomRole : IdentityRole<int> { }
public class CustomRoleClaim : IdentityRoleClaim<int> { }
public class CustomUserClaim : IdentityUserClaim<int> { }
public class User : IdentityUser<int> { }

THE ERROR

更新 1:问题已更新!

根据 Tao's answer ,我更正了我的代码。现在黄色的错误已经解决了,但是现在出现了红色的错误!

我该如何解决这个错误?

Value cannot be null. Parameter name: connectionString

Value cannot be null

包含 appsettings.json 文件:

{
"ConnectionStrings": {
"DefaultConnection": "Data Source='';initial catalog=Jahan-Beta;User ID=sa;password=''; Persist Security Info=True; Encrypt=False;TrustServerCertificate=False; MultipleActiveResultSets=True"
}
}

我还在 \bin\Debug\netcoreapp2.0 目录中复制了 appsettings.json。

最佳答案

既然你继承了ApplicationDbContext来自 IdentityDbContext<User, CustomRole, int, CustomUserClaim, CustomUserRole, CustomUserLogin, CustomRoleClaim, CustomUserToken> , 你应该使用 CustomRole而不是 IdentityRole同时AddIdentity .

services.AddIdentity<User, CustomRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();

关于asp.net - 在类 'BuildWebHost' 上调用方法 'Program' 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247409/

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