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

Nat*_*n A 2 asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity

我希望能够扩展IdentityRole的默认实现以包括描述等字段.为IdentityUser执行此操作非常简单,因为IdentityDbContext采用IdentityUser类型的通用参数.但是,IdentityDbContext不允许您为IdentityRole执行此操作.我怎么能做到这一点?

我知道我可以创建一个基本的DbContext,并实现我自己的IUserStore,这样我就可以使用自己的角色类,但我真的不想这样做.

有什么想法吗?

Spe*_*pin 10

我自己刚刚经历过这种痛苦.事实证明它非常简单.只需使用您的新属性扩展IdentityRole即可.

public class ApplicationRole : IdentityRole
{
    public ApplicationRole(string name)
        : base(name)
    { }

    public ApplicationRole()
    { }

    public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你需要添加该行

new public DbSet<ApplicationRole> Roles { get; set; }
Run Code Online (Sandbox Code Playgroud)

像这样进入你的ApplicationDbContext类,否则你会得到错误.

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {}

    new public DbSet<ApplicationRole> Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这就是我需要做的一切.确保将IdentityRole的所有实例更改为ApplicationRole,包括您正在播种的任何内容.另外,不要忘记发出"更新数据库"以将更改应用于您的数据库.除非将"ApplicationRole"设置为鉴别器,否则新的RoleManager将不会看到其中的任何现有行.您可以自己轻松添加.

HTH

埃里克