【发布时间】:2021-07-10 21:07:14
【问题描述】:
我正在开发一个 ASP.NET Core MVC Web 应用程序。我使用 Identity UI 框架进行用户授权和身份验证。
我已将所有 Identity 表的主键更改为“int”值(默认为字符串类型)
在以下代码中,我尝试将预定义的用户角色设置为“SuperAdmin”、“Admin”、“Businessman”和“WaterEnthusiast”,如下所示:
using Microsoft.AspNetCore.Identity;
using System.Linq;
using System.Threading.Tasks;
using WATERrhythmWeb.Models;
namespace WATERrhythmWeb.Data
{
public class ContextSeed
{
public static async Task SeedRolesAsync(UserManager<WaterrhythmUser> userManager, RoleManager<IdentityRole> roleManager)
{
//Seed Roles
await roleManager.CreateAsync(new IdentityRole(Enums.Roles.SuperAdmin.ToString()));
await roleManager.CreateAsync(new IdentityRole(Enums.Roles.Admin.ToString()));
await roleManager.CreateAsync(new IdentityRole(Enums.Roles.Businessman.ToString()));
await roleManager.CreateAsync(new IdentityRole(Enums.Roles.WaterEnthusiast.ToString()));
}
}
}
以下是枚举:
public enum Roles
{
SuperAdmin,
Admin,
Businessman,
WaterEnthusiast
}
以下是我的 DBContext 类:
public partial class ApplicationDbContext : IdentityDbContext<WaterrhythmUser, IdentityRole<int>, int, IdentityUserClaim<int>, IdentityUserRole<int>, IdentityUserLogin<int>, IdentityRoleClaim<int>, IdentityUserToken<int>>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.HasDefaultSchema("Identity");
modelBuilder.Entity<WaterrhythmUser>(entity =>
{
entity.ToTable(name: "User");
});
modelBuilder.Entity<IdentityRole>(entity =>
{
entity.ToTable(name: "WATERrhythmRole");
});
modelBuilder.Entity<IdentityUserRole<int>>(entity =>
{
entity.ToTable("WATERrhythmUserRoles");
});
modelBuilder.Entity<IdentityUserClaim<int>>(entity =>
{
entity.ToTable("WATERrhythmUserClaims");
});
modelBuilder.Entity<IdentityUserLogin<int>>(entity =>
{
entity.ToTable("WATERrhythmUserLogins");
});
modelBuilder.Entity<IdentityRoleClaim<int>>(entity =>
{
entity.ToTable("WATERrhythmRoleClaims");
});
modelBuilder.Entity<IdentityUserToken<int>>(entity =>
{
entity.ToTable("WATERrhythmUserTokens");
});
}
}
根据教程,经过上述修改后,当我运行应用程序时,上面定义的用户角色应该在数据库表中播种:'IdentityRole'。
但当我运行应用程序(已创建迁移并更新新数据库)时,它不会创建任何用户角色。
有人可以告诉我如何纠正这个问题吗?
谢谢。
(如您所见,我已将这些表的主键更改为“int”。我很好奇它是否会导致此问题。)
【问题讨论】:
标签: asp.net-mvc asp.net-core asp.net-identity user-roles asp.net-roles