ASP.NET Identity使用自定义名称复制表

时间:2018-04-03 21:35:29

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

我在ASP.NET MVC 5中使用.NET Framework进行了一个项目,并且我使用Identity来管理用户授权。项目的要求不允许我在数据库中保留默认的AspNet-(某物)名称。此外,我需要为角色和用户添加一些自定义属性。所以我创建了一个自定义用户和角色类,如下所示:

public class ApplicationRole : IdentityRole
{
    public virtual ICollection<RoleApllicationModel> RolesApplications { get; set; }
    public string description{get; set;}
}

使用此类,如果我更改表名的名称,如下所示:

modelBuilder.Entity<ApplicationUser>().ToTable("SSO_USERS");
modelBuilder.Entity<ApplicationRole>().ToTable("SSO_ROLES");
modelBuilder.Entity<IdentityUserLogin>().ToTable("SSO_USER_LOGINS");
modelBuilder.Entity<IdentityUserRole>().ToTable("SSO_USERS_ROLES");
modelBuilder.Entity<IdentityUserClaim>().ToTable("SSO_USER_CLAIMS");

创建数据库时,它会为角色添加第二个表,一个名为SSO_ROLES,一个AspNetRolesaspnetroles表包含idname,第二个表包含description,外键指向aspnetroles表。

这没有意义,我想知道是否有办法避免这种情况发生,只创建表SSO_ROLES idname和{ {1}}。如果我删除描述属性,它只会创建description表。

修改

以下是Identity

的上下文
SSO_ROLES

1 个答案:

答案 0 :(得分:0)

如果有人处理同样的问题,我找到了解决方案。您还需要向modelBuilder添加默认的Identity Class,如下所示:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<ApplicationUser>().ToTable("SSO_USERS");
    modelBuilder.Entity<IdentityUser>().ToTable("SSO_USERS");
    modelBuilder.Entity<ApplicationRole>().ToTable("SSO_ROLES");
    modelBuilder.Entity<IdentityRole>().ToTable("SSO_ROLES");
    modelBuilder.Entity<IdentityUserLogin>().ToTable("SSO_USER_LOGINS");
    modelBuilder.Entity<IdentityUserRole>().ToTable("SSO_USERS_ROLES");
    modelBuilder.Entity<IdentityUserClaim>().ToTable("SSO_USER_CLAIMS");
}

如果您使用像ApplicationRole这样的自定义类,还要添加具有相同表名的原始IdentityRole。