我有四张桌子
角色表
用户表
UserRole表
UserType表
默认Asp.net标识下面有Asp.netusers,Asp.netRoles,Asp.netuserlogins,Asp.netuserclaims,Asp.netuserroles
等表格我的表格不匹配相同的列名称和我的表格中没有的某些列。我可以使用自己的表来利用asp.net标识的功能,否则我需要按照Asp.netusers表中使用的相同列到我的用户表。
是否需要在我的表格中添加所有列?
我已经使用相同的默认表实现了asp.net身份EF数据库第一种方法。我有单独的角色存储和用户存储
下面这里的用户,userroles与asp.net身份(asp.netusers,asp.netroles)中的默认表相同
public partial class OVT_UserEntities : DbContext
{
public OVT_UserEntities()
: base("name=OVT_UserEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<UserClaim> UserClaims { get; set; }
public virtual DbSet<UserLogin> UserLogins { get; set; }
public virtual DbSet<UserRole> UserRoles { get; set; }
public virtual DbSet<User> Users { get; set; }
}
用户类:
public partial class User : IUser<int>
{
}
角色等级:
public partial class UserRole : IRole<int>
{
}
现在我想使用上面四个新表(上面的表设计图)代替asp.net标识提供的现有表。所以我不确定是否需要在我的数据库中添加所有表和列来处理asp.net身份?
答案 0 :(得分:2)
由于您使用的是Microsoft.AspNet.Identity
,因此您应该从IdentityUser
(名称空间Microsoft.AspNet.Identity.EntityFramework
)继承您的用户。
你的课程应该这样定义:
用户强>
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
}
<强>作用强>
public class Role : IdentityRole<int, UserRole>
{
}
用户-ROLE 强>
public class UserRole : IdentityUserRole<int>
{
}
用户-CLAIM 强>
public class UserClaim : IdentityUserClaim<int>
{
}
用户登录强>
public class UserLogin : IdentityUserLogin<int>
{
}
您可以扩展添加自己的自定义列的类:
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
public string CompanyName { get; set; }
}
现在你必须定义商店:
public class UserStore: UserStore<User, Role, int, UserLogin, UserRole, UserClaim>
{
public UserStore(MyContext context)
: base(context)
{
}
}
然后是数据库上下文,继承自IdentityDbContext
:
public class MyContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
public MyContext(): base("ConnectionString")
{
}
}
在您的数据库上下文( MyContext )中,您必须覆盖OnModelCreating
,以便您可以创建列,更改类型,表名等等:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyUser>()
.Property(p => p.Id)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyRole>()
.Property(p => p.Id)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserRole>()
.Property(p => p.RoleId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserRole>()
.Property(p => p.UserId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserClaim>()
.Property(p => p.Id)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserClaim>()
.Property(p => p.UserId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUserLogin>()
.Property(p => p.UserId)
.HasColumnType("int")
.IsRequired();
modelBuilder.Entity<MyUser>()
.ToTable("Users");
modelBuilder.Entity<MyRole>()
.ToTable("Roles");
modelBuilder.Entity<MyUserRole>()
.ToTable("UserRoles");
modelBuilder.Entity<MyUserClaim>()
.ToTable("UserClaims");
modelBuilder.Entity<MyUserLogin>()
.ToTable("UserLogins");
}
现在,您可以使用migrations来generate表格了。
我已更新github project以反映您的情况。
<强>更新强>:
如果要自定义列的名称和类型,只需为其命名即可:
modelBuilder.Entity<User>()
.Property(p => p.Id)
.HasColumnName("user_id")
.HasColumnType("SMALLINT")
.IsRequired();