Я создаю веб-сайт MVC 3. У меня есть модель, глядя, как это:Entity Framework: ViewModel to Domain Model
public class Survey
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime DateStart { get; set; }
public DateTime DateEnd { get; set; }
// Not in view
public DateTime DateCreated { get; set; }
// Not in view
public DateTime DateModified { get; set; }
}
Основываясь на этом я также Модельное редактировать информацию опроса:
public class SurveyEditViewModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime DateStart { get; set; }
public DateTime DateEnd { get; set; }
}
Когда пользователь заканчивает редактирование Я хотел бы сохранения изменений. Вот мой контроллер после действия:
[HttpPost]
public ActionResult Edit(SurveyEditViewModel model)
{
// Map the view model to a domain model using AutoMapper
Survey survey = Mapper.Map<SurveyEditViewModel, Survey>(model);
// Update the changes
_repository.Update(survey);
// Return to the overview page
return RedirectToAction("Index");
}
В моем хранилище (это родовое один сейчас) у меня есть следующий код:
public void Update(E entity)
{
using (ABCDataContext context = new ABCDataContext())
{
context.Entry(entity).State = System.Data.EntityState.Modified;
context.SaveChanges();
}
}
Когда выполняется я получаю следующее сообщение об ошибке: «обновление магазина , вставка или удаление повлияли на неожиданное количество строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновить записи ObjectStateManager. "
Я предполагаю, что этого следовало ожидать. Отображение из модели представления модели не дает мне полного объекта Survey.
Я мог бы изменить свой контроллер таким образом. И затем это работает:
[HttpPost]
public ActionResult Edit(SurveyEditViewModel model)
{
// Map the model to a real survey
survey = _repository.Find(model.Id);
survey.Name = model.Name;
survey.Description = model.Description;
survey.DateStart = model.DateStart;
survey.DateEnd = model.DateEnd;
// Update the changes
_repository.Update(survey);
// Return to the overview page
return RedirectToAction("Index");
}
Но мне было интересно, доступен ли лучший способ?
Отлично! Я отмечу это как ответ. – Aetherix
@DarinDimitrov Если я следую этому примеру, мой сундук должен отключить отслеживание изменений? Думаю, у меня будет много проблем, если я включу его. – MuriloKunze