Я работаю над простым приложением и пытаюсь разобраться в подходе CodeFirst EF. Пока все хорошо.
Мне удалось получить Создать и удалить отсортированные и получил редактирование работает. Дело в том, что я думаю, что код редактирования можно улучшить; Я просто не знаю как. Итак, вот оно:
public ActionResult Edit(int id, CreateResourceViewModel model)
{
if (ModelState.IsValid)
{
// save the changes
//UpdateModel(model.Resource);
//resourceAdminManager.SaveChanges();
Resource current = resourceAdminManager.Resources.Find(id);
current.ResourceTypeID = model.Resource.ResourceTypeID;
current.Name = model.Resource.Name;
current.Description = model.Resource.Description;
current.Email = model.Resource.Email;
current.TurnAroundTime = model.Resource.TurnAroundTime;
resourceAdminManager.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(model);
}
}
Я знаю, что здесь нет обработки исключений, и мне нужно учесть это, но моя главная проблема в том, что я вручную обновил модель. Мои опасения:
1. это в контроллере
2. Это жестко запрограммировано, поэтому любые изменения в модели потребуют доработки кода
Может кто-нибудь предложить лучший способ сделать это, пожалуйста.
Большое спасибо
Nathan
Итак, следуя предложениям AutoMapper:
Это очень полезно, и я начал играть с этим. У меня небольшие проблемы с этим.
Контроллер теперь выглядит так:
if (ModelState.IsValid)
{
try
{
var current = resourceAdminManager.Resources.Find(id);
current = Mapper.Map<CreateResourceViewModel, Resource>(model);
resourceAdminManager.SaveChanges();
return RedirectToAction("Index");
}
catch (Exception exc)
{
ModelState.AddModelError("Error", exc); // or, use a generic error.
}
}
return View(model);
Ошибка появляется в представлении, когда я нажимаю сохранить. Я получаю нулевое исключение в следующих случаях:
<%: Html.DropDownListFor(model => model.Resource.ResourceTypeID, new SelectList(Model.ResourceTypes, "ResourceTypeId", "Title"), "-- Select Resource Type --")%>
Есть идеи о том, чего мне здесь не хватает?