0

在我的 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继承自的类IdentityRole(并将IdentityRoleMVC 项目中的所有实例更改为ApplicationRole),则不会从数据库返回任何角色。例如,使用以下

RoleManager<ApplicationRole> RoleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));

当我调用RoleManager.Roles.

有没有人这样做并且可以提供一些指导?

更新 我忘记更改我的 DB Seed 方法以使用我的新方法ApplicationRole- 它仍在使用IdentityRole. 这样做之后,我无法对我的数据库应用更新,因为我不断收到 DBValidation 错误。在改编了这篇文章中的一些代码后,我能够通过覆盖ValidateEntityDbContext 的方法来让一切正常工作

4

1 回答 1

3

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

  1. 确保你继承自IdentityRole你的ApplicationRole
  2. 确保在您的 中添加以下内容ApplicationDbContext,以便您直接使用您的ApplicationRole.

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

  3. 您按照以下步骤操作

    • 启用迁移
    • 添加迁移“InitialSetup”
    • 更新数据库
    • 修改任何模型属性
    • 添加迁移“修改名称”
    • 更新数据库

您创建 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>
于 2013-11-13T10:16:20.893 回答