【发布时间】:2023-04-04 11:26:01
【问题描述】:
我已经创建了一个有效的注册用户方法,其中用户注册到数据库。我还创建了一个有效的新包方法,它创建了一个新包。它们都可以正常工作,但是当创建用户时,他的帐户类型设置为 null,我只想将用户“accountType”设置为“PackageName”。
封装型号:
public class Packages
{
public int Id { get; set; }
public string PackageName { get; set; }
public int OrderLimit { get; set; }
public decimal Cost { get; set; }
public string ResetIntervalType { get; set; }
public int ResetInterval { get; set; }
}
用户模型:
public class AppUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string AccountType { get; set; }
public int? PeriodOrderQty { get; set; }
public int? TotalOrderQty { get; set; }
public Guid? APIKey { get; set; }
//added packages foreign key, connection established
public Packages Package { get; set; }
public Cities City { get; set; }
public QualificationLevels Qualifications { get; set; }
}
这是我试图实现的 put 方法,在断点每个组件之后,主要问题是映射器被设置为方法的开头。但是我不确定还能尝试什么,只是刚刚开始使用这些方法。
[HttpPut("api/auth/assignpackage/{id}")]
public async Task<IActionResult> AssignPackage(int id ,[FromBody]Packages packageAssignValue)
{
try
{
var assignPackage = packageAssignValue;
var assignUser = Mapper.Map<Packages, AppUser>(packageAssignValue);
assignUser.AccountType = packageToEdit.PackageName;
var packageToEdit = await _context.Packages
.AsNoTracking()
.SingleOrDefaultAsync(m => m.Id == id);
assignUser.AccountType = assignPackage.PackageName;
if (packageToEdit == null)
{
return NotFound("Could not update Package as it was not Found");
}
else
{
_context.Update(assignUser);
await _context.SaveChangesAsync();
return Ok(assignUser);
}
}
catch (DbUpdateException)
{
//Log the error (uncomment ex variable name and write a log.)
ModelState.AddModelError("", "Unable to save changes. " +
"Try again, and if the problem persists, " +
"see your system administrator.");
return NotFound("Package not found");
}
}
这里是我的邮递员输入供参考:
{
"packageName": "Bronze"
}
【问题讨论】:
-
Mapper.Map将 Packages 转换为 AppUser? AppUser的Package属性如何设置为Packages? -
它不会简单地抛出 AutoMapper 异常错误,我想我可能试图以错误的方式实现它。但我知道映射器没有将 Package Property 设置为 AppUser 属性,这是本意。我希望它到达我忘记包含的这一行:[assignUser.AccountType = packageToEdit.PackageName]
-
It does not do that it simply throws an AutoMapper exception error,请在您的帖子中更新该异常的详细信息。 -
我修复了 AutoMapper 异常,但是我意识到我没有设置我想要将包值传递给的用户的值,因此根本不知道在哪里设置该值。
-
能分享一下映射逻辑的代码吗?