Сохранение данных в ASP.NET MVC - PullRequest
2 голосов
/ 16 февраля 2012

У меня возникли некоторые проблемы при обновлении и вставке записей с использованием ASP.NET MVC и Entity Framework.

У меня есть форма (которая представляет собой отчет), которая создается динамически и может содержать любое количество вопросов.,Я пытаюсь разрешить пользователю редактировать отчет и отправлять изменения, чтобы он обновлялся в базе данных.

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

Проблема в том, что она не сохраняет изменения.

Пожалуйста, кто-то может посоветоватьмне что я делаю не так?

Вот это Edit Действие:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(FormCollection formCollection, int moderatorReportId, string status)
    {
        ModeratorReport reportToEdit = repository.GetModeratorReportById(moderatorReportId);
        List<QuestionAnswer> originalReportAnswers = repository.GetAllModeratorReportAnswers(moderatorReportId, status).ToList();

        foreach (QuestionAnswer answer in originalReportAnswers) {
            reportToEdit.QuestionAnswers.Remove(answer);
        }

        int sectionID;
        int questionID;

        foreach (string key in formCollection.AllKeys)
        {
            var value = formCollection[key.ToString()];

            Match m = Regex.Match(key, "section(\\d+)_question(\\d+)");

            if (m.Success) {
                QuestionAnswer newAnswer = new QuestionAnswer();

                sectionID = Convert.ToInt16(m.Groups[1].Value.ToString());
                questionID = Convert.ToInt16(m.Groups[2].Value.ToString());

                newAnswer.ModeratorReportID = moderatorReportId;
                newAnswer.SectionID = sectionID;
                newAnswer.QuestionID = questionID;
                newAnswer.Answer = value;
                newAnswer.Status = "SAVED";
                reportToEdit.QuestionAnswers.Add(newAnswer);
            }
        }

        reportToEdit.Status = "SAVED";

        AuditItem auditItem = new AuditItem();
        auditItem.ModeratorReportID = moderatorReportId;
        auditItem.Status = "SAVED";
        auditItem.AuditDate = DateTime.Now;
        auditItem.Description = "The Moderator report..."
        auditItem.UserID = User.Identity.Name;
        reportToEdit.Audit.Add(auditItem);

        db.SaveChanges();

        return RedirectToAction("Details", new { id = moderatorReportId });
    }

1 Ответ

1 голос
/ 16 февраля 2012

Проблема выглядит так, как будто вы не устанавливаете EntityState reportToEdit в измененное состояние. Вот так:

reportToEdit.Audit.Add(auditItem); 

reportToEdit.EntityState = EntityState.Modified;
db.SaveChanges();

Дополнительные сведения о перечислении EntityState см. В этой статье MSDN .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...