我是点网核心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'的约束
有什么想法吗?有想法吗?我可以阅读文档吗?
答案 0 :(得分:3)
您可以编写自己的实现,该实现源自IdentityUser
public class AppUser : IdentityUser<int>
{
}
然后注册:
services.AddDefaultIdentity<AppUser>()
如果要向用户模型添加其他属性,这也很有用。
请记住,由于您正在更改表的主键,因此您将需要重新创建这些表而不是对其进行更新。
答案 1 :(得分:1)
要将IdentityUser密钥类型从字符串更改为int,还需要将IdentityDbContext
更改为IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>
。
Startup.cs
services.AddDefaultIdentity<IdentityUser<int>>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();
ApplicationDbContext
public class ApplicationDbContext : IdentityDbContext<IdentityUser<int>,IdentityRole<int>,int>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
删除Migrations
文件夹并删除现有数据库
运行命令以添加和更新数据库