我正在使用Entity Framework Core构建一个简单的Web API。我使用模型和视图模型来管理客户端实际接收到的数据。以下是我创建的模型和视图模型:
public class Team : BaseEntity
{
[Key]
public int TeamId { get; set; }
[Required]
public string TeamName { get; set; }
public List<TeamAgent> TeamAgents { get; set; }
}
public class TeamViewModel
{
[Required]
public int TeamId { get; set; }
[Required]
public string TeamName { get; set; }
[DataType(DataType.Date)]
public DateTime DateCreated { get; set; }
[DataType(DataType.Date)]
public DateTime DateModified { get; set; }
public List<TeamAgent> TeamAgents { get; set; }
}
public class TeamAgent : BaseEntity
{
[Key]
public int TeamAgentId { get; set; }
[ForeignKey("Agent")]
public int AgentId { get; set; }
[JsonIgnore]
public virtual Agent Agent { get; set; }
[ForeignKey("Team")]
public int TeamId { get; set; }
[JsonIgnore]
public virtual Team Team { get; set; }
[Required]
public string Token { get; set; }
}
public class TeamAgentViewModel
{
[Required]
public virtual AgentViewModel Agent { get; set; }
[Required]
public string Token { get; set; }
}
现在,为了更新,我在我的控制器中创建了一个更新方法:
[HttpPut("{id}")]
public async Task<IActionResult> Update(int id, [FromBody]TeamViewModel teamVM)
{
if (ModelState.IsValid)
{
var team = await _context.Teams
.Include(t => t.TeamAgents)
.SingleOrDefaultAsync(c => c.TeamId == id);
team.TeamName = teamVM.TeamName;
// HOW TO HANDLE IF SOME TEAMAGENTS GOT ADDED OR REMOVED???
_context.Teams.Update(team);
await _context.SaveChangesAsync();
return new NoContentResult();
}
return BadRequest(ModelState);
}
我陷入了如何更新与团队连接的TeamAgents的问题。我尝试过一种有效的方法,就是每次更新团队数据时删除所有的TeamAgents,然后重新创建它们。具体操作如下:
team.TeamAgents.Clear();
await _context.SaveChangesAsync();
team.TeamAgents.AddRange(teamVM.TeamAgents);
_context.Teams.Update(team);
await _context.SaveChangesAsync();
但是显然这不是一个很好的方法。使用Entity Framework Core更新相关项目的正确方法是什么?