2012-11-08 2 views
1

Я искал вокруг немного сейчас. Я попробовал пару решений, связанных с ловли OptimisticConcurrency и добавления:DbUpdateConcurrencyException при изменении данных

"@ Html.HiddenFor (модель => model.OrganizationID)"

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

DbUpdateConcurrencyException
магазина, вставка или удаление заявления повлиял неожиданное количества строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновить записи ObjectStateManager.

Я выполнил учебное пособие по созданию приложения Database First. В настоящее время я просто собираю данные из таблицы «Мои организации», пока я не смогу заставить ее работать плавно. Моя модель организации выглядит следующим образом (который был автоматически генерируется из «Добавить код Generation Item»):

//------------------------------------------------------------------------------ 
// <auto-generated> 
// This code was generated from a template. 
// 
// Manual changes to this file may cause unexpected behavior in your application. 
// Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace VAGTC.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Organization 
    { 
     public Organization() 
     { 
      this.Contact_Title = new HashSet<Contact_Title>(); 
      this.Organization_Address = new HashSet<Organization_Address>(); 
      this.Organization_Business_Type = new HashSet<Organization_Business_Type>(); 
      this.Organization_Country = new HashSet<Organization_Country>(); 
      this.Organization_Email = new HashSet<Organization_Email>(); 
      this.Organization_Membership = new HashSet<Organization_Membership>(); 
      this.Organization_Notes = new HashSet<Organization_Notes>(); 
      this.Organization_Phone = new HashSet<Organization_Phone>(); 
      this.Organization_Website = new HashSet<Organization_Website>(); 
      this.Contacts = new HashSet<Contact>(); 
      this.Organization_Industry_Code = new HashSet<Organization_Industry_Code>(); 
     } 

     public int OrganizationID { get; set; } 
     public string Name { get; set; } 

     public virtual ICollection<Contact_Title> Contact_Title { get; set; } 
     public virtual ICollection<Organization_Address> Organization_Address { get; set; } 
     public virtual ICollection<Organization_Business_Type> Organization_Business_Type { get; set; } 
     public virtual ICollection<Organization_Country> Organization_Country { get; set; } 
     public virtual ICollection<Organization_Email> Organization_Email { get; set; } 
     public virtual ICollection<Organization_Membership> Organization_Membership { get; set; } 
     public virtual ICollection<Organization_Notes> Organization_Notes { get; set; } 
     public virtual ICollection<Organization_Phone> Organization_Phone { get; set; } 
     public virtual ICollection<Organization_Website> Organization_Website { get; set; } 
     public virtual ICollection<Contact> Contacts { get; set; } 
     public virtual ICollection<Organization_Industry_Code> Organization_Industry_Code { get; set; } 
    } 
} 

Это Delete ActionResult в моем контроллере Организации:

// 
// GET: /Organization/Delete/5 

public ActionResult Delete(int id) 
{ 
    using (var db = new VAGTCEntities()) 
    { 
     return View(db.Organizations.Find(id)); 
    } 
} 

// 
// POST: /Organization/Delete/5 

[HttpPost] 
public ActionResult Delete(int id, Organization organization) 
{ 
    try 
    { 
     // TODO: Add delete logic here 
     using (var db = new VAGTCEntities()) 
     { 
      db.Entry(organization).State = System.Data.EntityState.Deleted; 
       db.SaveChanges(); 

     } 
      return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

и на моей странице индекса он объявляет первичный ключ:

@ Html.ActionLink ("Удалить", "Удалить", новый {ID = item.OrganizationID})

Из любопытства я решил попробовать добавить

"@ Html.HiddenFor (модель => model.OrganizationID)"

на дно, под BeginForm, а в верхней части страница в полевых знаках и под условными обозначениями:

@using (Html.BeginForm()) { 
    <p> 
     @Html.HiddenFor(model => model.OrganizationID) 
     <input type="submit" value="Delete" /> | 
     @Html.ActionLink("Back to List", "Index") 
    </p> 
} 

Низкий и вот - это сработало. Я все еще хочу опубликовать это! Возможно, кто-то еще найдет его, и это поможет им. Хотя я не знаю 100%, почему это так - может кто-то пролить свет на этот вопрос?

ответ

1

когда вы используете от помощника

@using (Html.BeginForm()) { 

он выплевывает следующие выходные данные

<form> 

</form> 

если вы хотите скрытое поле будут размещены вам нужно, чтобы получить его в форме, иначе она не будет быть размещен, вот почему OrganizationID был 0, когда вы положили скрытое поле вне формы ...

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