在寄存器中添加自定义SQL列

问题描述 投票:0回答:1

环境:vs2017,.core net 2.1,带有MVC的默认.core项目

我尝试在SQL DB中添加NickName列存储,我已经更新了DB,并且还在输入模型中添加了NickName列。它成功在注册页面上显示输入的NickName选项,但是在单击注册后无法写入SQL DB(以及照常进行其他工作)。

在重写IdentityUser之后,它不起作用。

Register.cshtml.cs中的添加/更改代码:

        public class CustomUserproperties : IdentityUser
        {
            public string NickName { get; set; }
        }

        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                //here is where i change.
                var user = new CustomUserproperties { UserName = Input.UserName, Email = Input.Email, NickName = Input.NickName };
                var result = await _userManager.CreateAsync(user, Input.Password);

我还能做什么?

visual-studio-2017 asp.net-core-2.1 .net-core-2.1
1个回答
0
投票

这里是一个有效的演示,您可以参考创建一个新的演示或检查您旧的演示之间的差异。

1。修改ApplicationDbContext和Add-migration,更新数据库

public class ApplicationDbContext : IdentityDbContext<CustomUserproperties>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

2。用上面的ApplicationDbContext来支持身份,那么您可以像下面这样获得RegisterModel:

 public class RegisterModel : PageModel
{
    private readonly SignInManager<CustomUserproperties> _signInManager;
    private readonly UserManager<CustomUserproperties> _userManager;
    private readonly ILogger<RegisterModel> _logger;
    private readonly IEmailSender _emailSender;

    public RegisterModel(
        UserManager<CustomUserproperties> userManager,
        SignInManager<CustomUserproperties> signInManager,
        ILogger<RegisterModel> logger,
        IEmailSender emailSender)
    {
        _userManager = userManager;
        _signInManager = signInManager;
        _logger = logger;
        _emailSender = emailSender;
    }

    [BindProperty]
    public InputModel Input { get; set; }

    public string ReturnUrl { get; set; }

    public class InputModel
    {
        [Required]
        [Display(Name = "NickName")]
        public string NickName { get; set; }

        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }

    public void OnGet(string returnUrl = null)
    {
        ReturnUrl = returnUrl;
    }

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        returnUrl = returnUrl ?? Url.Content("~/");
        if (ModelState.IsValid)
        {
            var user = new CustomUserproperties { UserName = Input.Email, Email = Input.Email , NickName = Input.NickName };
            var result = await _userManager.CreateAsync(user, Input.Password);

            ...
        }
    }
}

3。在StartUp.cs中更改ConfigureServices

     services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
     services.AddDefaultIdentity<CustomUserproperties>()
            .AddEntityFrameworkStores<ApplicationDbContext>();

4._LoginPartial.cshtml

@inject SignInManager<CustomUserproperties> SignInManager
@inject UserManager<CustomUserproperties> UserManager

这是我的project

© www.soinside.com 2019 - 2024. All rights reserved.