使用具有2个表的ASP身份实现身份验证

时间:2017-03-02 11:20:02

标签: asp.net asp.net-mvc entity-framework ef-code-first asp.net-identity

我只想使用 UserLoginsTable UserTable ,而不是默认的5个表。因为我只有一个“用户”类型(管理员),并且没有其他表格。

我正在使用ASP MVC 5框架和Entity Framework 6( Code First 方法)。

如何在我的申请中实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以像这样创建自己的User继承IdentityUser

public class User : IdentityUser
{

}

然后您忽略了DbContext中的其他类,包括原始IdentityUser,包括您的用户DbSet

public class MyDbContext : IdentityDbContext
{

    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // avoid some base class sets...

        modelBuilder.Ignore<IdentityUser>();
        modelBuilder.Ignore<IdentityUserRole>();
        modelBuilder.Ignore<IdentityRole>();
        modelBuilder.Ignore<IdentityUserClaim>();

        // keep identity's original configurations for AspNetUsers and AspNetUserLogins
        EntityTypeConfiguration<User> configuration = modelBuilder.Entity<User>().ToTable("AspNetUsers");
        configuration.HasMany<IdentityUserLogin>(u => u.Logins).WithRequired().HasForeignKey(ul => ul.UserId);
        IndexAttribute indexAttribute = new IndexAttribute("UserNameIndex")
        {
            IsUnique = true
        };
        configuration.Property((Expression<Func<User, string>>)(u => u.UserName)).IsRequired().HasMaxLength(0x100).HasColumnAnnotation("Index", new IndexAnnotation(indexAttribute));
        configuration.Property((Expression<Func<User, string>>)(u => u.Email)).HasMaxLength(0x100);
        modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { LoginProvider = l.LoginProvider, ProviderKey = l.ProviderKey, UserId = l.UserId }).ToTable("AspNetUserLogins");

    }

}

我忽略原始IdentityUser并创建自己的User的原因是因为这个例外:

  

导航属性&#39;角色&#39;不是类型的声明属性   &#39; IdentityUser&#39 ;.确认未明确排除   模型,它是一个有效的导航属性。

我尝试使用modelBuilder.Entity<IdentityUser>().Ignore(u => u.Roles);,但它没有解决,但如果有人知道如何解决这个问题,我们可以保持简单,我会很感激任何建议。

答案 1 :(得分:0)

当你运行add-migration“ApplicationDbContext”时,它会给你包含所有查询的迁移文件代码,你需要的是编写代码来删除其他4个表,如:

enable-migrations
add-migration "drop tables" //selected specific context

在迁移代码类

中记下以下代码
DropTable("dbo.AspNetUserClaims");
DropTable("dbo.AspNetUserLogins");
DropTable("dbo.AspNetUserRoles");
DropTable("dbo.AspNetRoles");

最后运行以下命令

update-database