在我的MVC5项目中,我使用以下实现扩展了IdentityUser
中的DbContext
类:
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
类时,它就不起作用了。如果我只创建一个继承自ApplicationRole
的{{1}}类(并将我的MVC项目中IdentityRole
的所有实例更改为IdentityRole
),则不会从数据库返回任何角色。例如,使用以下
ApplicationRole
RoleManager<ApplicationRole> RoleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));
时,产生的结果数为0.
有没有人这样做过,可以提供一些指导?
更新
我忘记更改我的数据库种子方法以使用我的新RoleManager.Roles
- 它仍在使用ApplicationRole
。执行此操作后,我无法将更新应用于我的数据库,因为我一直收到DBValidation错误。在调整了this post中的一些代码之后,我能够通过覆盖DbContext的IdentityRole
方法来完成所有工作
答案 0 :(得分:3)
How to Extend Microsoft.AspNet.Identity.EntityFramework.IdentityRole
IdentityRole
ApplicationRole
请务必在ApplicationDbContext
中添加以下内容,以便直接使用ApplicationRole
。
new public DbSet<ApplicationRole> Roles { get; set; }
您按照以下步骤进行操作
现在创建RoleManager的代码很好。
RoleManager<ApplicationRole> roleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));
ApplicationRole role = roleManager.FindByName("Admin");
RoleManager<ApplicationRole>
没有名称为"Roles"
ApplicationDbContext
有一个名为"Roles"
的媒体资源。正如您所遵循的步骤2,此属性现在返回为DbSet<ApplicationRole>