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

Owe*_*wen 8 c# asp.net-core asp.net-core-identity asp.net-core-2.2

我是 dot-net core 2.x 的新手,所以......

我想将 asp.net core 2.2 IdentityUser 中的 Id 类型从 string 更改为 int。

我通过谷歌(以及 stackoverflow 搜索工具)找到的所有示例都为我提供了 asp.net core 2.0 的示例,当您搭建 Identity(2.2 未提供)时,它提供了一个 ApplicationUser。

所以,我不知所措..我尝试的第一件事(我寄予厚望)是:

services.AddDefaultIdentity<IdentityUser<int>>()
  .AddRoles<IdentityRole>()
  .AddDefaultTokenProviders()
  .AddEntityFrameworkStores<ApplicationDbContext>();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试 Add-Migration InitialCreate -Context ApplicationDbContext 时出现以下错误:

访问类“程序”上的 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' 的约束

想法?想法?我可以阅读的文档?

Tao*_*hou 9

要将 IdentityUser 键类型从 string 更改为 int,您还需要IdentityDbContextIdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>.

  1. 启动文件

    services.AddDefaultIdentity<IdentityUser<int>>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
    Run Code Online (Sandbox Code Playgroud)
  2. ApplicationDbContext

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

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


FCi*_*Cin 7

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

public class AppUser : IdentityUser<int> 
{

}
Run Code Online (Sandbox Code Playgroud)

然后注册它:

services.AddDefaultIdentity<AppUser>()
Run Code Online (Sandbox Code Playgroud)

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

请记住,因为您正在更改表的主键,所以您需要重新创建这些表而不是更新它们。