更改asp.net core 2.2 IdentityUser的ID类型

时间:2018-12-12 18:56:40

标签: c# asp.net-core asp.net-core-identity asp.net-core-2.2

我是点网核心2.x的新手,所以...

我想将asp.net core 2.2 IdentityUser中ID的类型从字符串更改为int。

我通过google(和stackoverflow搜索工具)找到的所有示例都为我提供了asp.net core 2.0的示例,当您使用Identity(2.2不提供)时,该示例提供了ApplicationUser。

所以,我很茫然。我尝试的第一件事(我寄予厚望)是:

services.AddDefaultIdentity<IdentityUser<int>>()
  .AddRoles<IdentityRole>()
  .AddDefaultTokenProviders()
  .AddEntityFrameworkStores<ApplicationDbContext>();

但是,当我尝试添加迁移InitialCreate -Context ApplicationDbContext时,出现以下错误:

  

在类“ Program”上访问IWebHost时发生错误。没有应用程序服务提供商就继续进行。错误:GenericArguments [0],“ Microsoft.AspNetCore.Identity.IdentityUser`1 [System.Int32]”,“ Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore” 9 [TUser,TRole,TContext,TKey,TUserClaim,TUserRole, TUserLogin,TUserToken,TRoleClaim]'违反了类型'TUser'的约束

有什么想法吗?有想法吗?我可以阅读文档吗?

2 个答案:

答案 0 :(得分:3)

您可以编写自己的实现,该实现源自IdentityUser

public class AppUser : IdentityUser<int> 
{

}

然后注册:

services.AddDefaultIdentity<AppUser>()

如果要向用户模型添加其他属性,这也很有用。

请记住,由于您正在更改表的主键,因此您将需要重新创建这些表而不是对其进行更新。

答案 1 :(得分:1)

要将IdentityUser密钥类型从字符串更改为int,还需要将IdentityDbContext更改为IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>

  1. Startup.cs

    services.AddDefaultIdentity<IdentityUser<int>>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
  2. ApplicationDbContext

    public class ApplicationDbContext : IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
    }
    
  3. 删除Migrations文件夹并删除现有数据库

  4. 运行命令以添加和更新数据库