ASP.NET MVC5标识使用自定义表结构

时间:2015-01-16 09:19:48

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

如何将自定义表结构的ASP.NET标识用作UserUserIdPassword)和UserRoleUserId,IsAdmin,IsNormalUser,IsManager) 使用MVC 5? 我不想使用所有默认表格,例如AspNetUsersAspNetRolesAspNetUserClaimsAspNetUserRolesAspNetUserLogins

1 个答案:

答案 0 :(得分:1)

使用OnModelCreating事件将表和/或列映射到您自己的架构,就像我在this StackOverflow question中所做的那样。

这看起来像 -

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    var user = modelBuilder.Entity<IdentityUser>().HasKey(u => u.Id).ToTable("User", "Users"); //Specify our our own table names instead of the defaults

    user.Property(iu => iu.Id).HasColumnName("UserId");
    user.Property(iu => iu.UserName).HasColumnName("UserName");
    user.Property(iu => iu.PasswordHash).HasColumnName("Password");
    user.Ignore(iu => iu.Email);
    user.Ignore(iu => iu.EmailConfirmed);
    user.Ignore(iu => iu.PhoneNumber);
    user.Ignore(iu => iu.PhoneNumberConfirmed);
    user.Ignore(iu => iu.AccessFailedCount);
    user.Ignore(iu => iu.LockoutEnabled);
    user.Ignore(iu => iu.LockoutEndDateUtc);
    user.Ignore(iu => iu.SecurityStamp);
    user.Ignore(iu => iu.TwoFactorEnabled);

    user.HasMany(u => u.Roles).WithRequired().HasForeignKey(ur => ur.UserId);

    user.Ignore(iu => iu.Logins);
    user.Ignore(iu => iu.Claims);

    modelBuilder.Ignore<IdentityUserClaim)();

    modelBuilder.Ignore<IdentityUserLogin>();

...

}

这里的流畅API的关键部分是ToTable([TableName], [SchemaName])HasColumnName([ColumnName])

这可以适用于使用标准Entity Framework Code First为您创建表,或映射到现有数据库或使用SQL脚本手动创建的数据库。

有关Code First(包括Fluent API映射)的更多信息,请参阅Code First to a New Database

由于您希望忽略DbContext类的属性并排除某些DbContext类完全映射,因此您需要将.Ignore() extension method用于未映射的属性,并将.Ignore<T>() extension method用于类的模型构建器

这些属性(和集合)仍将存在于内存中,但不会持久保存到数据库中。