.ASP.Net.Core 2.2 身份更改 ID 从字符串更改为 int



我正在尝试将用户表的 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 页面(登录、注册等(  });

相关内容

  • 没有找到相关文章

最新更新