Обработка формы редактирования Optimistic Concurrency MVC

У меня проблема с формой редактирования ниже, она никогда не перехватывает DbUpdateConcurrencyException. Что я делаю неправильно?

Класс

public class EditViewModel
{
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

Контроллер

[AcceptVerbs("POST", "PUT")]
public ActionResult EditData(System.Web.Mvc.FormCollection formData) 
{

int year = Convert.ToInt32(formData["year"]);
int itemID = Convert.ToInt32(formData["itemID"]);
byte[] rowVersionID = Encoding.UTF8.GetBytes(formData["RowVersion"]);
string row = Convert.ToBase64String(rowVersionID);    

if (ModelState.IsValid) {
string[] itemIDArray = formData.GetValues("item.itemID");

using(BusinessLogicLayer BLL = new BusinessLogicLayer()) {

   for (int i = 0; i < itemIDArray.Count(); i++) {
    try   
    {        
     BLL.UpdateItem(Convert.ToInt32(itemIDArray[i]));

     BLL.SaveChanges();

    } 

 catch (DbUpdateConcurrencyException ex) //it never catches the exception

    {

     // Get the current entity values and the values in the database 
     // as instances of the entity type 
     var entry = ex.Entries.Single();
     var databaseValues = entry.GetDatabaseValues();

     ModelState.AddModelError(string.Empty, "The record you attempted to 
     edit has been modified by another user. Please try again!");      
    }
   }
  }
 }

 return View();
}
}
}

Я также установил для столбца RowVersion «Режим параллелизма» фиксированное значение.

введите здесь описание изображения

РЕДАКТИРОВАНИЕ

Я также изменил исключение блока catch на общее, и теперь я получаю следующую ошибку:

введите здесь описание изображения


person coffeetime    schedule 05.11.2018    source источник
comment
Вы уверены, что itemIDArray.Count() не равно нулю?   -  person derloopkat    schedule 05.11.2018
comment
Да, это не ноль   -  person coffeetime    schedule 05.11.2018
comment
Это должен быть какой-то другой тип, чем DbUpdateConcurrencyException, просто создайте блок catch типа Exception, и если есть какое-либо исключение, оно гарантированно войдет в блок, и вы сможете увидеть точный тип исключения.   -  person Brian Ogden    schedule 05.11.2018
comment
Я изменил блок catch на тип Exception, и теперь я получаю сообщение об ошибке в следующей строке: var entry = ex.Entries.Single(); он говорит, что «Исключение» не содержит определения для записей   -  person coffeetime    schedule 06.11.2018


Ответы (1)


Вероятно, это другой тип исключения. Измените блок catch на общее исключение:

catch (Exception e){
    // your catch code
}

Затем посмотрите, какую ошибку он выдает, и соответствующим образом скорректируйте свой код.

person Adam    schedule 05.11.2018
comment
Я изменил блок catch на общее исключение и теперь получаю сообщение об ошибке в следующей строке: var entry = ex.Entries.Single(); он говорит, что «Исключение» не содержит определения для записей - person coffeetime; 06.11.2018