Не удалось сохранить изменения в базе данных через Entity Framework 6, попробовали несколько разных тотализаторов, но никто не работал

asp.net-mvc-5 c# entity-framework-6

Вопрос

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

http://msdn.microsoft.com/en-us/library/dd756368.aspx context.UpdateObject не существует

http://www.asp.net/mvc/tutorials/mvc-5/introduction/examining-the-edit-methods-and-edit-view Дайте ошибку

System.Data.Entity.Core.OptimisticConcurrencyException: сохранение инструкции update, insert или delete повлияло на неожиданное количество строк (0). Объекты могут быть изменены или удалены, поскольку объекты загружены. Обновить записи ObjectStateManager.

http://www.dotnetcurry.com/showarticle.aspx?ID=619 дайте мне ошибку:

Последовательность не содержит элементов

Поэтому я не понимаю, что я должен сделать, чтобы обновить эту дату. Вот два кода, которые я пробовал:

[Route("Edit"), HttpPost, ValidateAntiForgeryToken]
public ActionResult EditSection([Bind(Include = "ID, RouteName, Type, Title, Synopsis")]  Section section, HttpPostedFileBase Logo)
{
    SectionAddEditVM model = new SectionAddEditVM { Section = section };

    if (ModelState.IsValid)
    {
        try
        {
            using (db)
            {
                var SectionUpdate = (from s in db.Sections
                                     where s.ID == section.ID
                                     select s).First();
                SectionUpdate.RouteName = section.RouteName;
                SectionUpdate.Type = section.Type;
                SectionUpdate.Title = section.Title;
                SectionUpdate.Synopsis = section.Synopsis;

                db.SaveChanges();
            }
        }
        catch (Exception ex)
        {
            ErrorSignal.FromCurrentContext().Raise(ex);
            ModelState.AddModelError("Processing Error", "There was a problem processing the change, please try again later.");
            return View(model);
        }
    }
    return View(model);
}

А ТАКЖЕ

[Route("Edit"), HttpPost, ValidateAntiForgeryToken]
public ActionResult EditSection([Bind(Include = "ID, RouteName, Type, Title, Synopsis")] Section section, HttpPostedFileBase Logo)
{
    SectionAddEditVM model = new SectionAddEditVM { Section = section };

    if (ModelState.IsValid)
    {
        try
        {
            using (db)
            {
                db.Entry(section).State = EntityState.Modified;
                db.SaveChanges();
            }
        }
        catch (Exception ex)
        {
            ErrorSignal.FromCurrentContext().Raise(ex);
            ModelState.AddModelError("Processing Error", "There was a problem processing the change, please try again later.");
            return View(model);
        }
    }
    return View(model);
}

Около 200 строк над кодом редактирования я объявил свое свойство db с помощью private SectionContext db = new SectionContext(); и он используется без проблем для добавления новых данных на сервер и получения данных с этого сервера.

Принятый ответ

Решение только пришло ко мне, я понял, по моему мнению, не было ввода, содержащего идентификатор редактируемого раздела, поэтому, когда он пытается проверить БД, у него нет данных для сравнения с первичным ключом. Я просто добавил: @Html.HiddenFor(m => m.Section.ID) и теперь все работает, используя:

using (db)
{
    db.Entry(section).State = EntityState.Modified;
    db.SaveChanges();
}

Популярные ответы

У меня была такая же проблема и добавление строки в мою форму ввода:

@Html.HiddenFor(m => m.SectionID, model.SectionID) 

Наряду с добавлением к Bind в контроллере:

[HttpPost]
public ActionResult Edit([Bind(Include = "SectionID, SectionName, Note")]Section sectionObject)
{
    ...



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему