EF6 DbUpdateConcurrencyExcpetion в отключенном сценарии - PullRequest
0 голосов
/ 11 июня 2019

Я борюсь с DbUpdateConcurrencyException в отключенном сценарии, используя EF6 (Entity Framework 6) с БД Oracle.

В основном мой код выглядит так (просто):

//retrieve transfer object from db (with statusid = 2)
//do something
transfer.StatusId = 3;

using (TransferContext tc = new TransferContext())
{
    tc.Entry(transfer).State = EntityState.Modified;

    tc.SaveChanges();
}

EF регистрирует следующий SQL:

update "T_TRANSFER_SC"
   set "STATUS_ID" = :p0
where (("ID" = :p1) 
   and ("STATUS_ID" = :p2))


-- :p0: '3' (Type = Decimal)

-- :p1: '1' (Type = Decimal)

-- :p2: '3' (Type = Decimal)

-- Completed in 3 ms with result: 0

И для идентификатора, и для свойства STATUS_ID установлено значение: Режим параллелизма = фиксированный .

Как видите, параметры p0 и p2 имеют значение 3, но p2 должно иметь значение 2 (по крайней мере, из моего понимания), которое является старым значением свойства.

Если я выполняю код, я получаю DbUpdateConcurrencyException исключение:
«Оператор хранения, вставки или удаления затронул неожиданное количество строк (0). Возможно, объекты были изменены или удалены с момента загрузки объектов. Информацию о понимании и обработке исключений оптимистичного параллелизма см. http://go.microsoft.com/fwlink/?LinkId=472540».

Исключение связано, потому что в базе данных нет записи с ID = 1 и STATUS_ID = 3 (запись в db имеет значения 1 и 2). Я не понимаю, почему EF не использует старое значение STATUS_ID в предложении Where.

Я что-то упускаю, или это всегда так при работе в разных контекстах (отключено)? И как мне это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...