首页 > 解决方案 > 使用默认 IdentityUser 创建异步用户从 .NetCore2.2 升级到 .NetCore3.0 后似乎不起作用

问题描述

工作实现 我已将 identityUser 的默认类型更改为整数和配置的其余部分,以使其再次正常工作。

启动配置

Changed: identityBuilder = new IdentityBuilder(identityBuilder.UserType, typeof(IdentityRole<int>), identityBuilder.Services);

自定义用户类

Changed: public class AppUser : IdentityUser<int>

应用程序数据库上下文

Changed:  public class ApplicationDbContext : IdentityDbContext<AppUser, IdentityRole<int>, int, IdentityUserClaim<int>, IdentityUserRole<int>, IdentityUserLogin<int>,IdentityRoleClaim<int>, IdentityUserToken<int>>

旧实现 Repository 实现中的 identityResult 变量返回 null 并引发以下异常:

System.InvalidOperationException:无法跟踪“AppUser”类型的实体,因为主键属性“Id”为空

启动配置

var identityBuilder = services.AddIdentityCore<AppUser>(o =>
    {
        // configure identity options
        // Options are intentionally let out
    });

identityBuilder = new IdentityBuilder(identityBuilder.UserType, typeof(IdentityRole), identityBuilder.Services);
identityBuilder.AddEntityFrameworkStores<ApplicationDbContext>();

自定义用户类

public class AppUser : IdentityUser 
{
    // Extended Properties
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

应用程序数据库上下文

public class ApplicationDbContext : IdentityDbContext<AppUser>

存储库

public async Task<CreateUserResponse> CreateUser(User user, string password)
{
    var appUser = _mapper.Map<AppUser>(user);           
    var identityResult = await _userManager.CreateAsync(appUser, password);         
    return new CreateUserResponse(appUser.Id.ToString(), identityResult.Succeeded, identityResult.Succeeded ? null : identityResult.Errors.Select(e => new Error(e.Code, e.Description)));
}   

标签: asp.net-identity-3asp.net-core-3.0entity-framework-core-3.0

解决方案


推荐阅读