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
相关产品推荐
相关产品推荐

