我希望能够扩展 IdentityRole 的默认实现以包含描述等字段。对 IdentityUser 执行此操作很容易,因为 IdentityDbContext 采用 IdentityUser 类型的通用参数。但是,IdentityDbContext 不允许您为 IdentityRole 执行此操作。我怎样才能做到这一点?
我知道我可以创建一个基本的 DbContext,并实现我自己的 IUserStore,这样我就可以使用我自己的角色类,但我真的不想这样做。
有什么想法吗?
我希望能够扩展 IdentityRole 的默认实现以包含描述等字段。对 IdentityUser 执行此操作很容易,因为 IdentityDbContext 采用 IdentityUser 类型的通用参数。但是,IdentityDbContext 不允许您为 IdentityRole 执行此操作。我怎样才能做到这一点?
我知道我可以创建一个基本的 DbContext,并实现我自己的 IUserStore,这样我就可以使用我自己的角色类,但我真的不想这样做。
有什么想法吗?
我自己也刚刚经历过这种痛苦。事实证明这很简单。只需使用您的新属性扩展 IdentityRole。
public class ApplicationRole : IdentityRole
{
public ApplicationRole(string name)
: base(name)
{ }
public ApplicationRole()
{ }
public string Description { get; set; }
}
然后你需要添加行
new public DbSet<ApplicationRole> Roles { get; set; }
像这样进入你的 ApplicationDbContext 类,否则你会得到错误。
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{}
new public DbSet<ApplicationRole> Roles { get; set; }
}
这就是我需要做的。确保将 IdentityRole 的所有实例更改为 ApplicationRole,包括您正在播种的任何内容。此外,不要忘记发出“更新数据库”以将更改应用到您的数据库。除非您将“ApplicationRole”设置为鉴别器,否则您的新 RoleManager 不会看到其中的任何现有行。您可以自己轻松地添加它。
高温高压
埃里克
UserManager<TUser>
用作UserStore<TUser>
其用户存储 ( IUserStore
)。UserManager
用于UserStore
将用户添加和删除role name
作为 IUserRole。
同样,还有接口IRole
& IRoleStore<TRole>
forIdentityRole
和RoleStore<TRole>
where TRole
is IdentityRole
。这是为了直接与角色一起工作。
所以你可以继承IdentityRole
和添加额外的信息。用于RoleStore<MyRole>
管理它以及其他信息。
RoleManager<TRole>
提供Role的核心交互方式,可以使用MyRoleStore。
MyIdentityRole.cs
public class MyIdentityRole: IdentityRole
{
public String Description { get; set;}
}