WorkStation设置:
- Windows 8.1 Pro
- Visual Studio Pro 2013 V 12.0.40629.00更新5
- .net v 4.6.01055
背景:
我使用单个帐户身份验证创建了我的项目,然后遵循在YouTube上找到的指南,我从现有数据库创建了EDMX数据模型。我这样做是为了为我的网站创建身份验证。然后,我修改了Web.config文件中的默认连接,以指向我现有的数据库。在修改默认连接后,我注册了第一个用户帐户时,它自动生成了我现有数据库中的所有必要的ASPNET表。
问题:
我需要在Aspnetusers表中添加自定义列。我遵循了Microsoft的指南,在此处找到,但是当我了解修改模型 IdentityModels.cs文件时,我无法这样做。
。尝试分辨率:
我尝试通过自己简单地将列添加到SQL数据库中,然后编辑我的WebAPI代码来绕过这一点。
首先,我编辑了coundmentingmodels.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文件中找到的寄存器类。我添加了与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'的定义"。当我转到sidentityUser.cs文件时,它已锁定,不允许我编辑它。
错误意味着您未将列添加到Model(EDMX(中的IdentityUser类/表中。
问题是,您通常不能仅仅扩展IdentityUser,您需要从IdentityUser继承。通常,因为在您的情况下,我怀疑Aspnetusers表是EDMX的一部分。因此,我想您可以在此处添加一列来解决此问题。但我不确定。
首先使用代码(如Microsoft指南中提到的(,您应该创建一个名为" applicationuser"的类,该类别继承IdentityUser。并在那里添加该属性:
public class ApplicationUser : IdentityUser
{
[Required]
public string PeopleID { get; set; }
}
,然后在您的代码中进行目标应用程序器(而不是IdentityUser(:
var user = new ApplicationUser
{
UserName = model.UserName,
Email = model.Email,
PeopleID = model.PeopleID,
};
我最终重新启动了我的项目。在进行任何更改之前,我更新了所有内容,并且没有创建EDMX模型。我只是将默认连接字符串更改为指向我的实时数据库。一旦完成了所有这些信息,我就找到了sidentityModels.cs文件,然后能够按照本指南进行修改:
https://blogs.msdn.microsoft.com/webdev/2013/10/10/16/customizing-profile-profile-information-infile-in--asp-net-sideity-intity-in-sideity-in-vs-vs-vs-2013-templates/