SaveChangesAsync не работает внутри метода PUT

Я использую ODataController для вставки и обновления записей в базу данных. Я использую метод PUT, используя .UpdateEntryAsync()

Вот мой метод размещения.

public async Task<IHttpActionResult> Put([FromODataUri] string key, Delta<KYCBtnDetails> patch)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }

                KYCBtnDetails KYCBtnDetails = await _KYCDBModel.KYCBtnDetails.FindAsync(key);
                if (KYCBtnDetails == null)
                {
                    return NotFound();
                }

                patch.Put(KYCBtnDetails);
                KYCBtnDetails.id = key;

                try
                {
                    await _KYCDBModel.SaveChangesAsync();
                }
                catch (Exception e)
                {

                }

                return Updated(KYCBtnDetails);
            }
            catch (Exception ex)
            {

            }
            return null;
        }

в ожидании _KYCDBModel.SaveChangesAsync() это дает мне ошибку, поскольку новая транзакция не разрешена, поскольку в сеансе выполняются другие потоки. Произошла ошибка при запуске транзакции в соединении с провайдером. Подробности смотрите во внутреннем исключении.

Иногда запускается, а иногда выдает ошибку

Пожалуйста, помогите мне в этом, спасибо.


person Devendra    schedule 09.09.2020    source источник
comment
Пожалуйста, поделитесь минимально воспроизводимым примером. Короткий ответ: _KYCDBModel, скорее всего, зарегистрирован неправильно.   -  person mjwills    schedule 09.09.2020
comment
Похоже, что вопросы ищут более подробную информацию   -  person Derviş Kayımbaşıoğlu    schedule 09.09.2020
comment
99,99% это из-за разделения _KYCDBModel между несколькими запросами.   -  person Dennis    schedule 09.09.2020
comment
Согласен с Денисом   -  person Roman Ryzhiy    schedule 09.09.2020


Ответы (1)


По соглашению, вот как должна выглядеть сигнатура действия контроллера Put:

public async Task<IHttpActionResult> Put([FromODataUri] string key, [FromBody]KYCBtnDetails kycBtnDetails)
{
    // ...
}

Если вы решите использовать Patch, вот как должна выглядеть сигнатура действия контроллера:

public async Task<IHttpActionResult> Patch([FromODataUri] string key, [FromBody]Delta<KYCBtnDetails> patch)
{
    // ...
}

Обратите особое внимание на атрибут FromBody

person John Gathogo    schedule 10.09.2020