You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UserManager.CreateAsync无法将用户保存至数据库的问题求助

问题描述

我尝试了多种方法排查这个问题:调用UserManager.CreateAsync(user, request.Password)后执行_context.SaveChangesAsync(),数据库表没有新增任何记录,而且SaveChangesAsync()返回0(表示无数据受影响);但如果先调用CreateAsync创建用户,再执行_context.Users.AddAsync(user)后调用SaveChangesAsync(),用户数据就能正常保存到数据库。补充说明:user.Id已经有值,CreateAsync和SaveChangesAsync都没有抛出异常(已添加try-catch捕获)。

相关代码

ApplicationDbContext.cs

public class ApplicationDbContext : IdentityDbContext<User>, IApplicationDbContext
{
    public ApplicationDbContext(DbContextOptions options) : base(options)
    {
    }

    public DbSet<ExternalApplications> Applications { get; set; }

    public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
    {
        return await base.SaveChangesAsync(cancellationToken);
    }
}

PersistenceDI.cs

public static class PersistenceDI
{
    public static IServiceCollection AddPersistenceLayer(this IServiceCollection services, string connectionString)
    {
        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));

        services.AddIdentityCore<User>().AddEntityFrameworkStores<ApplicationDbContext>().AddUserManager<UserManager<User>>();

        services.AddScoped<IUserRepository, UserRepository>();

        return services;
    }
}

User.cs

public class User : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

CreateUserCommandHandler.cs

public record CreateuserCommand : IRequest<string>
{
    public string Email { get; set; }
    public string Password { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class CreateUserCommandHandler : IRequestHandler<CreateuserCommand, string>
{
    public IApplicationDbContext _context;
    public UserManager<User> _userManager;

    public CreateUserCommandHandler(IApplicationDbContext context, UserManager<User> userManager)
    {
        _context = context;
        _userManager = userManager;
    }

    public async Task<string> Handle(CreateuserCommand request, CancellationToken cancellationToken)
    {
        User user = new User
        {
            Email = request.Email,
            FirstName = request.FirstName,
            LastName = request.LastName,
            UserName = request.FirstName + " " + request.LastName + "eqweetwtweywe",
        };

        await _userManager.CreateAsync(user, request.Password);
        await _context.SaveChangesAsync(cancellationToken);

        return user.Id;
    }
}

内容的提问来源于stack exchange,提问作者Vladyslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:45:29