Требуется ли синхронизация внутри метода контроллера, который читает и записывает в базу данных SQLite? - PullRequest
0 голосов
/ 26 мая 2020

Итак, между вызовом 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);
    }
...