Итак, между вызовом FirstOrDefaultAsync
и SaveChangesAsync()
, возможно ли, что другой вызов контроллера от другого пользователя вызовет проблемы?
Необходимо ли использовать [MethodImpl(MethodImplOptions.Synchronized)]
или аналогичные методы для блокировки ресурса (база данных)?
/// <summary>
/// Updates a project's Name and/or SlackWebHookUrl.
/// </summary>
[HttpPut("{projectId}")]
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> UpdateProject(int projectId, [FromBody] Project projectToEdit)
{
Project project = await _databaseContext.Projects
.Where(p => p.Id == projectId)
.Include(p => p.LockedFiles)
.FirstOrDefaultAsync();
if (project == null)
{
return NotFound($"No matching project found with id: {projectId}");
}
if (!string.IsNullOrWhiteSpace(projectToEdit.Name))
{
project.Name = projectToEdit.Name;
}
if (!string.IsNullOrWhiteSpace(projectToEdit.SlackWebHookUrl))
{
project.SlackWebHookUrl = projectToEdit.SlackWebHookUrl;
}
await _databaseContext.SaveChangesAsync();
return Ok(project);
}