2013-12-20 7 views
2

Я, кажется, собираюсь сходить с ума, чтобы мой хвост не получал простую запись для обновления в проекте структуры сущности MVC 3. Что мне не хватает?Обновление записи с использованием Entity Framework 5 ошибок с DbUpdateConcurrencyException

Я могу создавать записи в порядке, но, похоже, не может выработать логику для выполнения обновления. Я пробовал различные методы, прикрепляя, не прикрепляя, и думаю, что я пропустил шаблон, когда задействованы внешние ключи или что-то в этом роде.

Объект, возвращенный видом, полностью заполнен и модель действительна. Заполнены поля идентификатора внешнего ключа.

Любые идеи, пожалуйста.

РоКо

public class EFormApplication 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ApplicationId { get; set; } 
    [ForeignKey("ApplicationTemplateId")] 
    public virtual ApplicationTemplate ApplicationTemplate { get; set; } 
    public int ApplicationTemplateId { get; set; } 
    [Required(ErrorMessage = "Each application must have a Title")] 
    public string Title { get; set; } 
    [Required(ErrorMessage = "Each application must have a Description. This is visible to the clients")] 
    public string Description { get; set; } 
    [ForeignKey("SecurityId")] 
    public virtual Security Security { get; set; } 
    public int SecurityId { get; set; } 
    public bool Published { get; set; } 
    [Display(Name = "EIDV Required")] 
    public bool EIDVRequired { get; set; } 
    [Display(Name = "Investor confirmation required")] 
    public bool InvestorConfirmationRequired { get; set; } 
    [Display(Name = "Advisor confirmation required")] 
    public bool AdvisorConfirmationRequired { get; set; } 
    [Display(Name = "Payment required")] 
    public bool PaymentRequired { get; set; } 
    [Display(Name = "Login Required")] 
    public bool UserLoginRequired { get; set; } 
    [Display(Name = "ISA Trans allowed")] 
    public bool IsaTransfersAllowed { get; set; } 
    public DateTime? Deadline { get; set; } 
    [Display(Name = "Fully Subscribed")] 
    public bool FullySubscribed { get; set; } 
    [Display(Name = "Image Url")] 
    [RegularExpression(@"^(ht)tp(s?):\/\/[0-9a-zA-Z].+$", ErrorMessage = "You must enter a valid URI including the http:// or https://")] 
    public string ImageUrl { get; set; } 
    [Display(Name = "Information Url")] 
    [RegularExpression(@"^(ht)tp(s?):\/\/[0-9a-zA-Z].+$", ErrorMessage = "You must enter a valid URI including the http:// or https://")] 
    public string InformationUrl { get; set; } 
    public bool Discontinued { get; set; } 
    public DateTime Created { get; set; } 
    public string CreatedBy { get; set; } 
    public DateTime LastUpdated { get; set; } 
    public string LastUpdatedBy { get; set; } 

    //navigation 
    public virtual ICollection<ApplicationSubmission> ApplicationSubmissions { get; set; } 
} 

Методы редактирования контроллера являются

[Authorize(Roles = "Admins")] 
    public ActionResult Edit(int applicationId) 
    { 
     EFormApplication eformapplication = _formRepository.GetEFormApplication(applicationId); 
     return View(eformapplication); 
    } 


    [Authorize(Roles = "Admins")] 
    [HttpPost] 
    public ActionResult Edit(EFormApplication eformapplication) 
    { 
     if (ModelState.IsValid) 
     { 
      eformapplication.LastUpdated = DateTime.UtcNow; 
      eformapplication.LastUpdatedBy = User.Identity.Name; 

      var opstatus = _formRepository.UpdateEFormApplication(eformapplication); 

      if (opstatus.Status) 
      { 
       return RedirectToAction("Design", "eForm"); 
      } 
      else 
      { 
       return RedirectToAction("OpStatusError", "Error", opstatus); 
      } 
     } 

     return View(eformapplication); 
    } 

И метод вместилище UpdateEFormApplication который является бит, сохранить запись выглядит следующим образом:

public OperationStatus UpdateEFormApplication(EFormApplication eFormApplication) 
    { 
     DataContext.Entry(eFormApplication).State = EntityState.Modified; 
     DataContext.SaveChanges(); 

     return Save(eFormApplication); 
    } 

ответ

2

Как я писал этот вопрос и che Скрывая мои факты, я обнаружил очень простую ошибку, которую я совершил!

Я забыл указать поле ID на странице редактирования, так что это было установлено на ноль в опубликованной модели!

Урок ... убедитесь, что все поля представлены на форме, и если вы не хотите, чтобы это отображалось, используйте это как скрытое поле!

Благодарим за помощь. Переполнение стека ;-)

+0

Благодарим вас за то, что нашли время, чтобы опубликовать ответ после того, как вы его нашли. Я изменил таблицы и не обновил свой редактор EditorTemplate, и это привело меня к правильному пути. –

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