【问题标题】:How to map columns in Custom model to Identity model in ASP.NET Core Identity如何将自定义模型中的列映射到 ASP.NET Core 标识中的标识模型
【发布时间】:2019-10-25 07:48:37
【问题描述】:

我正在使用现有数据库的现有项目中实现 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 创建了一些额外的列。

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

另外,我注意到 EF Core 将 MyRoles 表名更改为 AspNetRolesMyUsers 表并非如此。 MyUsers 表名保持不变,即使如上所述创建了额外的列。这是为什么呢?

PS:我正在使用 DotNet Core 3.0 和 EF Core 3.0。

【问题讨论】:

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


    【解决方案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");
              });
          }
      }
      

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2018-09-03
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      相关资源
      最近更新 更多