我正在尝试将用户表的 ID 从字符串 (GUID( 更改为 int,并且真的很挣扎。我看过很多例子,但它们似乎适用于早期版本的 Identity 或 vs,并且由于多种原因它们不起作用。
我要么收到编译器错误
'Microsoft.AspNetCore.Identity.IdentityUser', on 'Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore 6[TUser,TContext, TKey, TUserClaim, TUserLogin, TUserToken]' 违反了类型'TUser'的约束。
或者当我创建迁移时,我仍然会得到一个 ID 的字符串列,而不是我期望的 int。
我正在使用 vs2019。Asp.Net.Core 2.2 和 Microsoft.AspNetCore.Identity 2.2
请问谁能帮我?谢谢!
首先按如下方式扩展IdenityUser
类类,以便可以添加自定义属性:
public class ApplicationUser : IdentityUser<int>
{
}
然后扩展IdentityRole
类,如果你在应用程序中也使用Role
。即使您不想使用它,也可以安全地保存它:
public class ApplicationRole : IdentityRole<int>
{
}
现在您的ApplicationDbContext
应如下所示:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
现在在Startup
类的ConfigureServices
方法中,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
}
工作完成!现在运行一个全新的迁移并应用它。
@TanvirArjel解决方案也在我的项目中与.NET Core 3.1一起使用,并进行了修改。我通过脚手架添加了身份。
我没有编辑 ConfigureServices((,而是编辑了 IdentityHostingStartup.cs而是在 IdentityHostingStartup.cs 中对 Configure(( 进行了修改:
建筑工人。ConfigureServices((context, services( => { 服务业。AddDbContext(options => options.UseSqlServer(context.Configuration.GetConnectionString("IdentityDbContextConnection"(((; 服务业。添加身份(( .AddEntityFrameworkStores(( .AddDefaultTokenProviders(( .AddDefaultUI((;为身份添加默认的 Razor 页面(登录、注册等( });