问题描述
所以我正在开发一个 api 控制器,我有一个这样的更新方法:
[HttpPost("update")]
public async Task<IActionResult> Update([FromBody] UpdateModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = _userManager.Users
.Include(u => u.Address)
.FirstOrDefault(u => u.UserName == model.Email);
if (user == null)
{
return BadRequest(new {Message = "User doesn't exist"});
}
user.FirstName = model.FirstName;
user.LastName = model.LastName;
user.Address = model.Address;
await _userManager.UpdateAsync(user);
return Ok(new {Message = "User has been updated successfully"});
}
这是地址:
public class Address : Entity
{
public string AddressLine { get; set; }
public string PostalCode { get; set; }
public string City { get; set; }
}
和更新模型:
public class UpdateModel
{
[required]
[MinLength(3)]
public string FirstName { get; set; }
[required]
public string LastName { get; set; }
[required]
[EmailAddress]
public string Email { get; set; }
public Address Address { get; set; }
}
我已经完成了适当的迁移,并尝试在用户变量上设置断点。在调用 updateAsync 之前,变量确实保存了一个地址。
用户的名字和姓氏都在 POST 请求中更新,但地址保持为空。
有人知道为什么会这样吗?
解决方法
我认为您在用户和地址之间设置了一对一的映射。因此,首先检查关系映射并仍然不起作用,然后尝试创建地址的新变量,然后将此新变量分配给 user.Address