У меня нет особых проблем, но я нашел способ разработки этого кода не очень хорошо.
У меня есть контроллер стран (метод редактирования) (слой WebUI):
[HttpGet]
public ActionResult Edit(int id)
{
var country = _groupsRepository.getCountryById(id);
Mapper.CreateMap<Country, CountriesEditViewModel>();
CountriesEditViewModel viewModel = Mapper.Map<Country, CountriesEditViewModel>(country);
return View(viewModel);
}
//
// POST: /CountriesAdmin/Edit/5
[HttpPost]
public ActionResult Edit(int id, CountriesEditViewModel viewModel)
{
try
{
if (ModelState.IsValid)
{
Mapper.CreateMap<CountriesEditViewModel, Country>();
Country country = Mapper.Map<CountriesEditViewModel, Country>(viewModel);
country.Name = IntranetTools.UppercaseFirst(country.Name.Trim());
country.ISOCode = country.ISOCode.ToLower();
_countryValidationService.UpdateCountry(country);
}
}
catch (RulesException ex)
{
ex.CopyTo(ModelState);
}
if (ModelState.IsValid)
return RedirectToAction("Index");
else return View(viewModel);
}
И моя Служба проверки (слой домена):
public void UpdateCountry(Country country)
{
EnsureValidForUpdate(country);
// UPDATE
var countryToUpdate = _groupsRepository.getCountryById(country.CountryId);
countryToUpdate.CountryId = country.CountryId;
countryToUpdate.Name = country.Name;
countryToUpdate.ISOCode = country.ISOCode;
_groupsRepository.SaveChanges();
}
На самом деле, как вы можете видеть, я использую Automapper для сопоставления моей сущности Country (Entity Framework) и моей модели представления.
Я использую службу проверки, которая выполняет проверку и обновляет мой объект (если нет ошибок) в базе данных. Дело в том, что я чувствую, что должен получить свой объект из БД по его идентификатору, чтобы сохранить этот объект. Я думаю, что, возможно, есть лучшее решение для обновления моего объекта (потому что я не хочу отображать все поля для своих объектов и каждый раз получать страну из БД)
var countryToUpdate = _groupsRepository.getCountryById(country.CountryId);
countryToUpdate.CountryId = country.CountryId;
countryToUpdate.Name = country.Name;
countryToUpdate.ISOCode = country.ISOCode;
_groupsRepository.SaveChanges();
Есть ли лучшее решение для сохранения моих объектов с помощью Framwork или у меня нет выбора?
Спасибо!