Когда я хочу создать объект с использованием DTO, я хочу получить идентификатор недавно вставленного объекта в DTO, который живет в моем контроллере.C# DTO получить идентификатор объекта
Контроллер:
public ActionResult Create(HotelsViewModel hotelsViewModel)
{
if (ModelState.IsValid)
{
HotelsDTO hotelDTO = _mapper.Map<HotelsDTO>(hotelsViewModel);
_hotelService.Create(hotelDTO);
_hotelService.AddHotelAmenities(hotelDTO.Id, hotelsViewModel.SelectedAmenities);
return RedirectToAction("Index");
}
return View(hotelsViewModel);
}
Услуги:
Чтобы получить Id обратно в мой контроллер я должен изменить тип возвращаемого значения метода Create как целое или есть другой способ, чтобы сделать эту работу?
public void Create(TDTO entity)
{
T t = _mapper.Map<T>(entity);
_repository.Create(t);
_unitOfWork.Commit();
}
После SaveChanges получает удар идентификатор т становится установлен, но я не в состоянии получить идентификатор в моем DTO объект обратно в контроллере.
Любые советы?
Пробный поиск, это уже обсуждалось много раз. Вы теряете связь между viewmodel и DTO через сопоставление, поэтому обновление до одного не обновляет другое. Верните идентификатор, верните DTO, используйте параметры 'out', чтобы сделать то же самое или сгенерировать идентификатор заранее, и передать его в' Create() '. Последнее соответствовало бы Сегрегации Ответственности Командного Запроса (CQRS), которая может рассматриваться как противоположная прагматика. – CodeCaster
После вызова 'SaveChanges' ваш' t.ID' должен иметь свое значение. Итак, если вы установите 'entity.ID = t.ID;' после '_unitOfWork.Commit();' он должен работать для вас. –
@Adil no, объект сопоставляется с DTO, который отображается с помощью viewmodel. Обновление DTO не обновит модель просмотра. – CodeCaster