Я только что обновил свое приложение с .NET Core 1.x до 2.x, и есть очень подробная документация от Microsoft о том, как перейти с .NET Core 1.x на 2.x. Вы должны следовать инструкциям и убедиться, что вы делаете все шаги, применимые к вашему проекту.
Например, я могу сказать, что ваш Program.cs
отличается от того, который создан шаблоном 2.X.
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
// You don't need .UseKestrel() and others as they're from 1.X.
// .CreateDefaultBuilder() already includes them.
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
Так как вы не опубликовали код для ApplicationUser
, я могу опубликовать только мой. Поскольку мне нужно изменить первичный ключ со строки по умолчанию на GUID, мне нужно создать пользовательские классы для пользователя и ролей приложения.
public class AppUser : IdentityUser<Guid>
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public string DisplayName => $"{ this.FirstName } { this.LastName }";
}
public class AppRole : IdentityRole<Guid>
{
}
Затем вам нужно наследовать от IdentityDbContext из AppUser, AppRole и первичного ключа GUID.
public class AppIdentityDbContext : IdentityDbContext<AppUser, AppRole, Guid>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<AppUser>().ToTable("User");
builder.Entity<AppRole>().ToTable("Role");
builder.Entity<IdentityUserRole<Guid>>().ToTable("UserRole");
builder.Entity<IdentityUserClaim<Guid>>().ToTable("UserClaim");
builder.Entity<IdentityRoleClaim<Guid>>().ToTable("RoleClaim");
builder.Entity<IdentityUserLogin<Guid>>().ToTable("UserLogin");
builder.Entity<IdentityUserToken<Guid>>().ToTable("UserToken");
}
}
В вызове ConfigureServices
вы пропускаете .AddEntityFrameworkStores()
и .AddDefaultTokenProviders()
.
services.AddIdentity<AppUser, AppRole>(o => {
// configure identity options
o.Password.RequireDigit = false;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
o.Password.RequireNonAlphanumeric = false;
o.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
// Components that generate the confirm email and reset password tokens
.AddDefaultTokenProviders();