如何将自定义模型中的列映射到ASP.NET Core Identity中的Identity模型

时间:2019-10-25 07:48:37

标签: c# asp.net asp.net-core entity-framework-core

我正在使用现有数据库的现有项目中实现ASP.NET Core Identity。

我已指定用于IdentityUserIdentityRole的实体,如下所示:

public partial class MyContext : IdentityDbContext<MyUser, MyRole, int>

Startup.cs中:

services.AddIdentity<MyUser, MyRole>(options =>
        {
            options.User.RequireUniqueEmail = true;
        }).AddEntityFrameworkStores<MyContext>();

我能够将迁移成功地应用于数据库。但是,在检查AspNetRole表时,我可以看到EF创建了一些额外的列。

enter image description here

如何告诉EF Core使用现有的列(例如上图中的RoleId中的Id而不是创建新的列?

此外,我注意到EF Core将MyRoles表名更改为AspNetRoles,而MyUsers表却没有。 MyUsers表名保持不变,即使如上所述也创建了额外的列。为什么会这样?

PS:我使用的是DotNet Core 3.0和EF Core 3.0。

1 个答案:

答案 0 :(得分:1)

  1. 添加[Column()]批注以更改默认列名:

    public class MyRole: IdentityRole<int>
    {
        [Column("RoleId")]
        public override int Id { get; set; }
    
        [Column("RoleName")]
        public override string Name { get; set; }
    }
    
  2. 要重用旧表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");
            });
        }
    }