Обработка формы оптимистичного параллелизма MVC Edit - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблема с формой редактирования ниже, она никогда не перехватывает 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 «Режим параллелизма» фиксированный

enter image description here

редактирует

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

enter image description here

1 Ответ

0 голосов
/ 05 ноября 2018

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

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

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

...