miroCyber 2023-10-13 01:56 采纳率: 40%
浏览 13
已结题

.Net使用模版自带的注册和角色数据库

我创建了2个AspNetUsers的继承子表分别是doctor和patient,

img

我注册的时候想同时往user里面存账号密码和子表doctor里面存名字,出现了主键冲突。

img

问了别人说要重写这个自带的创建方法,但是我想保留原来的分配角色,请问怎么做

  • 写回答

14条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-13 08:17
    关注
    获得0.80元问题酬金

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    要同时往AspNetUsers表和doctor子表中存储数据,并且保留原来的角色分配,你需要重写AspNetUsers的注册方法。

    首先,你需要在IdentityModels.cs文件中找到ApplicationUser类,然后创建一个自定义的Register方法,如下所示:

    public class ApplicationUser : IdentityUser
    {
        // ...其他属性和方法
    
        public string DoctorName { get; set; } // 添加一个属性用于存储医生名字
    
        // 重写注册方法,将数据同时保存到AspNetUsers和doctor表中
        public async Task<IdentityResult> RegisterAsync(UserManager<ApplicationUser> userManager, string password, string doctorName)
        {
            var user = new ApplicationUser { UserName = this.UserName, Email = this.Email };
            var result = await userManager.CreateAsync(user, password);
    
            if (result.Succeeded)
            {
                using (var context = new ApplicationDbContext())
                {
                    var userId = userManager.FindByName(this.UserName).Id;
    
                    var doctor = new Doctor { DoctorId = userId, DoctorName = doctorName };
                    context.Doctors.Add(doctor);
                    await context.SaveChangesAsync();
                }
            }
    
            return result;
        }
    }
    

    接下来,你需要在AccountController.cs文件的Register方法中调用自定义的Register方法,并传递医生名字参数,如下所示:

    public class AccountController : Controller
    {
        private UserManager<ApplicationUser> _userManager;
        private RoleManager<IdentityRole> _roleManager;
    
        // ...其他代码
    
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                // ...其他代码
    
                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
                var result = await user.RegisterAsync(_userManager, model.Password, model.DoctorName);
    
                // ...其他代码
            }
    
            // ...其他代码
        }
    }
    

    通过以上步骤,你就可以同时将账号密码保存到AspNetUsers表中,将医生名字保存到doctor子表中,并且保留原来的角色分配。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音