我在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
,一个AspNetRoles
。 aspnetroles
表包含id
和name
,第二个表包含description
,外键指向aspnetroles
表。
这没有意义,我想知道是否有办法避免这种情况发生,只创建表SSO_ROLES
id
,name
和{ {1}}。如果我删除描述属性,它只会创建description
表。
修改
以下是Identity
的上下文SSO_ROLES
答案 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。