How to Extend Microsoft.AspNet.Identity.EntityFramework.IdentityRole

雨燕双飞 提交于 2019-11-30 16:29:04

I have just gone through this pain myself. It actually turned out to be pretty simple. Just extend IdentityRole with your new properties.

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

    public ApplicationRole()
    { }

    public string Description { get; set; }
}

Then you need to add the line

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

into your ApplicationDbContext class like this otherwise you will get errors.

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

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

thats all I needed to do. Make sure you change all instances of IdentityRole to ApplicationRole including anything you are seeding. Also, dont forget to issue a "update-database" to apply the changes to your DB. Any existing rows in there won't be seen by your new RoleManager unless you have the "ApplicationRole" set as a discriminator. You can easily add this yourself.

HTH

Erik

UserManager<TUser> uses UserStore<TUser> as its user store (IUserStore). UserManager works with UserStore for adding and removing user to a role name as IUserRole.

Likewise, there are interfaces IRole & IRoleStore<TRole> for IdentityRole and RoleStore<TRole> where TRole is IdentityRole. This is to work plainly with Roles directly.

So you can inherit IdentityRole and add additional information. Use RoleStore<MyRole> to manage it along additional information.

RoleManager<TRole> provides core interaction methods for Role, which can use MyRoleStore.

MyIdentityRole.cs

public class MyIdentityRole: IdentityRole
{
   public String Description { get; set;}
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!