2016-09-14 4 views
2

Когда я хочу создать объект с использованием 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 объект обратно в контроллере.

Любые советы?

+3

Пробный поиск, это уже обсуждалось много раз. Вы теряете связь между viewmodel и DTO через сопоставление, поэтому обновление до одного не обновляет другое. Верните идентификатор, верните DTO, используйте параметры 'out', чтобы сделать то же самое или сгенерировать идентификатор заранее, и передать его в' Create() '. Последнее соответствовало бы Сегрегации Ответственности Командного Запроса (CQRS), которая может рассматриваться как противоположная прагматика. – CodeCaster

+2

После вызова 'SaveChanges' ваш' t.ID' должен иметь свое значение. Итак, если вы установите 'entity.ID = t.ID;' после '_unitOfWork.Commit();' он должен работать для вас. –

+1

@Adil no, объект сопоставляется с DTO, который отображается с помощью viewmodel. Обновление DTO не обновит модель просмотра. – CodeCaster

ответ

2

Вы можете просто добавить entity.Id = t.Id; сразу после совершения изменений, то есть сразу после строки: _unitOfWork.Commit();

+0

Спасибо, работает как шарм! – user2963570

 Смежные вопросы

  • Нет связанных вопросов^_^