gpt4 book ai didi

asp.net - 将列添加到 AspNetUsers 表

转载 作者:行者123 更新时间:2023-12-04 19:30:49 24 4
gpt4 key购买 nike

工作站设置:

  • Windows 8.1 专业版
  • Visual Studio Pro 2013 v 12.0.40629.00 更新 5
  • .Net v 4.6.01055

  • 背景:

    我使用个人帐户身份验证创建了我的项目,然后按照我在 Youtube 上找到的指南从现有数据库创建了一个 EDMX 数据模型。我这样做是为了为我的网站创建身份验证。然后我修改了 web.config 文件中的默认连接以指向我现有的数据库。当我在修改默认连接后注册第一个用户帐户时,它会在我现有的数据库中自动生成所有必需的 AspNet 表。

    问题:

    我需要向 AspNetUsers 表添加一个自定义列。我按照微软的指南,找到 here ,但是当我进入修改 Models\IdentityModels.cs 文件的步骤时,我无法这样做,因为文件丢失。

    尝试解决:

    我试图通过简单地将列添加到 SQL 数据库中,然后编辑我的 WebAPI 代码来绕过这个。

    首先,我编辑了 AccountBindingModels.cs 文件中的 RegisterBindingModel 类。我添加了 PeopleID 部分。
    public class RegisterBindingModel
    {
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

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

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

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} 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; }
    }

    然后我编辑了 AccountController.cs 文件中的 Register 类。我添加了有关 PeopleID 的行。
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
    if (!ModelState.IsValid)
    {
    return BadRequest(ModelState);
    }

    IdentityUser user = new IdentityUser
    {
    UserName = model.UserName,
    Email = model.Email,
    PeopleID = model.PeopleID,
    };

    IdentityResult result = await UserManager.CreateAsync(user, model.Password);
    IHttpActionResult errorResult = GetErrorResult(result);

    if (errorResult != null)
    {
    return errorResult;
    }

    return Ok();
    }

    现在一旦我添加 PeopleID = model.PeopleID,我收到一条错误消息,指出“Microsoft.AspNet.Identity.EntityFramework.IdentityUser”不包含“PeopleID”的定义”。当我转到 IdentityUser.cs 文件时,它被锁定并且不允许我对其进行编辑。

    最佳答案

    该错误意味着您没有将该列添加到模型 (edmx) 中的 IdentityUser 类/表中。

    问题是,您通常不能只扩展 IdentityUser,您需要从 IdentityUser 继承。通常,因为在您的情况下,我怀疑 AspNetUsers 表是 edmx 的一部分。所以我想你可以在那里添加一列来解决这个问题。但我不确定。

    首先使用代码(如 Microsoft 指南中所述),您应该创建一个名为 ApplicationUser 的类,该类继承 IdentityUser。并在那里添加属性:

    public class ApplicationUser : IdentityUser
    {
    [Required]
    public string PeopleID { get; set; }
    }

    然后在您的代码中定位 ApplicationUser(而不是 IdentityUser):
    var user = new ApplicationUser
    {
    UserName = model.UserName,
    Email = model.Email,
    PeopleID = model.PeopleID,
    };

    关于asp.net - 将列添加到 AspNetUsers 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43810032/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com