2015-09-23 2 views
0

Итак, я создал пользовательский контроллер путем анализа объектов в модели в базе данных в моем проекте и внутри этого контроллера, есть метод post, который называется Edit, который включает в себя поля базы данных, такие как а Id, название, описание, FileName, FILETYPE, FileSize, Автор, DateUploadedSystem.Data.Entity.Infrastructure.DbUpdateException произошло

в окне редактирования HTML, я удалил некоторые элементы, потому что все, что я хочу, чтобы изменить это «Название» и «Описание» и я тоже удалил поля в методе edit в контроллере, который я создал.

Чтобы это объяснить;

public ActionResult Edit([Bind(Include = FileSharing "Id,Title,Description,FileName,FileType,FileSize,Author,DateUploaded")] FileSharing fileSharing) 

в:

public ActionResult Edit([Bind(Include = "Id,Title,Description")] FileSharing fileSharing) 

Когда я пытаюсь изменить название или описание. Это даст ошибку исключения, говоря

System.Data.Entity.Infrastructure.DbUpdateException»произошло в EntityFramework.dll, но не был обработан в пользовательском коде

Почему я получаю эту ошибку и как я могу обойти это?

Edit метод

public ActionResult Edit([Bind(Include = "Id,Title,Description")] FileSharing fileSharing) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       db.Entry(fileSharing).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      catch (Exception) 
      { 
       ViewBag.EditFail = "Error editing file details."; 
      } 
     } 
     return View(fileSharing); 
    } 
+0

где происходит обновление базы данных. Покажите соответствующий код. – user1666620

+0

Исключение генерируется внутри вашего действия, вероятно, на 'dbContext.SaveChanges()'. Вы должны обернуть этот вызов в блок try/catch, а затем просмотреть полное исключение и внутреннее исключение (исключения), EF довольно хорошо описывает точную причину исключения. Если вам по-прежнему нужна помощь, укажите полные сведения об исключении, а также полный код в действии. – Igor

+0

@ user1666620 Обновлено мое сообщение. – Justin

ответ

0

Вот как я обрабатывать это исключение.

private Exception HandleDbUpdateException(DbUpdateException dbu) 
     { 
      var builder = new StringBuilder("A DbUpdateException was caught while saving changes. "); 
      if (!(dbu.InnerException is System.Data.Entity.Core.UpdateException) || 
       !(dbu.InnerException.InnerException is System.Data.SqlClient.SqlException)) 
      { 
       try 
       { 
        foreach (var result in dbu.Entries) 
        { 
         builder.AppendFormat("Type: {0} was part of the problem. ", result.Entity.GetType().Name); 
        } 
       } 
       catch (Exception e) 
       { 
        builder.Append("Error parsing DbUpdateException: " + e); 
       } 
      } 
      else 
      { 
       var sqlException = (System.Data.SqlClient.SqlException)dbu.InnerException.InnerException; 
       for (int i = 0; i < sqlException.Errors.Count; i++) 
       { 
        builder.AppendLine(" SQL Message: " + sqlException.Errors[i].Message); 
        builder.AppendLine(" SQL procedure: " + sqlException.Errors[i].Procedure); 
       } 
      } 

      string message = builder.ToString(); 
      return new Exception(message, dbu); 
     } 

Тогда по крайней мере исключение имеет более релевантную информацию, которая, вероятно, делает его легким для вас, чтобы выяснить, что случилось (например, какой-то вопрос проверки БД).

Смежные вопросы