扩展Asp.Net Identity IdentityRole的问题

时间:2013-11-12 22:28:32

标签: c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

在我的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方法来完成所有工作

1 个答案:

答案 0 :(得分:3)

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

  1. 确保您继承IdentityRole
  2. ApplicationRole
  3. 请务必在ApplicationDbContext中添加以下内容,以便直接使用ApplicationRole

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

  4. 您按照以下步骤进行操作

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

  5. 现在创建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>