扩展 Asp.Net 标识角色时出现问题



在我的MVC5项目中,我使用以下实现扩展了DbContext中的IdentityUser类:

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext()
            : base("DefaultConnection") { }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>()
               .ToTable("Users");
            modelBuilder.Entity<ApplicationUser>()
                .ToTable("Users");
        }
}

使用 ApplicationUser 类:

public class ApplicationUser : IdentityUser
{
    public string EmailAddress { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public string ConfirmationToken { get; set; }
    public bool EmailIsConfirmed { get; set; }
}

但是,每当我尝试做同样的事情并扩展IdentityRole类时,它都不起作用。如果我只是创建一个继承自IdentityRoleApplicationRole类(并将 MVC 项目中的所有 IdentityRole 实例更改为 ApplicationRole ),则不会从数据库返回任何角色。例如,使用以下

RoleManager<ApplicationRole> RoleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));

当我调用 RoleManager.Roles 时产生的结果计数为 0。

有没有人这样做并且可以提供一些指导?

更新我忘了更改我的数据库种子方法以使用我的新ApplicationRole - 它仍在使用 IdentityRole .这样做之后,我无法对我的数据库应用更新,因为我不断收到 DBValidation 错误。在改编了这篇文章中的一些代码之后,我能够通过覆盖 DbContext 的 ValidateEntity 方法使一切正常工作

如何扩展Microsoft.AspNet.Identity.EntityFramework.IdentityRole

  1. 确保您继承自IdentityRoleApplicationRole
  2. 确保在ApplicationDbContext中添加以下内容,以便直接使用ApplicationRole

    new public DbSet<ApplicationRole> Roles { get; set; }

  3. 您按照以下步骤操作

    • 启用迁移
    • 添加迁移"初始设置"
    • 更新数据库
    • 修改任何模型属性
    • 添加迁移"修改名称"
    • 更新数据库

创建角色管理器的代码现在很好。

RoleManager<ApplicationRole> roleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));
ApplicationRole role = roleManager.FindByName("Admin");
  • RoleManager<ApplicationRole>没有任何名称为 "Roles" 的属性
  • ApplicationDbContext有一个名为 "Roles" 的属性。按照步骤 2 进行操作时,此属性现在返回为 DbSet<ApplicationRole>

相关内容

  • 没有找到相关文章

最新更新