使用自定义用户而不是ASP.NET IdentityUser

时间:2015-04-01 12:50:18

标签: asp.net asp.net-mvc entity-framework identity

我是ASP.NET身份的新手,并尝试自定义创建新MVC项目时提供的身份。

ASP.NET Identity会自动为句柄身份验证和授权创建一些表。

我的主要目标是创建用户表,但其他人。我尝试使用代码来防止创建这些表:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Ignore<IdentityUserRole>();
        modelBuilder.Ignore<IdentityUserClaim>();
        modelBuilder.Ignore<IdentityRole>();
    }

当我想创建用户时,返回错误:

导航属性“Roles”不是“ApplicationUser”类型的声明属性。验证它是否未从模型中明确排除,并且它是有效的导航属性。

我发现内置的Identity用户具有以下结构:

IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>

我需要的是创建一个不包含角色,声明等的自定义IdentityUser。我只想在运行项目时使用“用户”表。

是否有可能创建自己的IdentityUser或自定义内置的IdentityUser?或者是否有任何建议只创建“用户”表并使用它?

非常感谢你的建议。

1 个答案:

答案 0 :(得分:1)

这是我为了获得解决方案所做的:

  • 我删除了base.OnModelCreating
  • 然后我按此顺序添加了忽略。

    //base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<IdentityUser>().ToTable("User");
    modelBuilder.Entity<IdentityUser>().ToTable("User").Ignore(p => p.Roles);
    modelBuilder.Ignore<IdentityUserRole>();
    modelBuilder.Ignore<IdentityUserLogin>();
    modelBuilder.Ignore<IdentityUserClaim>();
    modelBuilder.Ignore<IdentityRole>();
    

这样做我得到了一个最后的错误,它说:无法丢弃对象&#39; dbo.Role&#39;因为它是由FOREIGN KEY约束引用的。

为此我改变了移动DropTable的迁移(&#34; dbo.Role&#34;)。我知道这是黑客攻击,但我没有发现EF迁移如何将droptables句子移动到正确的顺序。

理查德