我正在使用现有数据库的现有项目中实现ASP.NET Core Identity。
我已指定用于IdentityUser
和IdentityRole
的实体,如下所示:
public partial class MyContext : IdentityDbContext<MyUser, MyRole, int>
在Startup.cs
中:
services.AddIdentity<MyUser, MyRole>(options =>
{
options.User.RequireUniqueEmail = true;
}).AddEntityFrameworkStores<MyContext>();
我能够将迁移成功地应用于数据库。但是,在检查AspNetRole表时,我可以看到EF创建了一些额外的列。
如何告诉EF Core使用现有的列(例如上图中的RoleId
中的Id
而不是创建新的列?
此外,我注意到EF Core将MyRoles
表名更改为AspNetRoles
,而MyUsers
表却没有。 MyUsers
表名保持不变,即使如上所述也创建了额外的列。为什么会这样?
PS:我使用的是DotNet Core 3.0和EF Core 3.0。
答案 0 :(得分:1)
添加[Column()]
批注以更改默认列名:
public class MyRole: IdentityRole<int>
{
[Column("RoleId")]
public override int Id { get; set; }
[Column("RoleName")]
public override string Name { get; set; }
}
要重用旧表MyRoles
,请自定义OnModelCreating(builder)
方法:
public class AppIdentityDbContext : IdentityDbContext<MyUser, MyRole, int>
{
...
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<MyRole>(e =>{
e.ToTable("MyRoles");
});
}
}