在我的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
类时,它都不起作用。如果我只是创建一个继承自IdentityRole
的ApplicationRole
类(并将 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
- 确保您继承自
IdentityRole
的ApplicationRole
-
确保在
ApplicationDbContext
中添加以下内容,以便直接使用ApplicationRole
。new public DbSet<ApplicationRole> Roles { get; set; }
-
您按照以下步骤操作
- 启用迁移
- 添加迁移"初始设置"
- 更新数据库
- 修改任何模型属性
- 添加迁移"修改名称"
- 更新数据库
创建角色管理器的代码现在很好。
RoleManager<ApplicationRole> roleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));
ApplicationRole role = roleManager.FindByName("Admin");
-
RoleManager<ApplicationRole>
没有任何名称为"Roles"
的属性 -
ApplicationDbContext
有一个名为"Roles"
的属性。按照步骤 2 进行操作时,此属性现在返回为DbSet<ApplicationRole>