DTO를 사용하여 엔티티를 만들고 싶을 때 컨트롤러에있는 DTO에 최근 삽입 된 엔티티의 ID를 가져 오려고합니다.C# DTO 엔티티 ID 받기
컨트롤러 :
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를 검색하려면? SaveChanges를 한 후
public void Create(TDTO entity)
{
T t = _mapper.Map<T>(entity);
_repository.Create(t);
_unitOfWork.Commit();
}
는 t의 ID가 설정지고 있지만 내 DTO의 ID를 검색하는 데 실패하고있어 충돌 다시 컨트롤러에서 개체를 가져옵니다.
어떤 조언이 필요합니까?
해보십시오 검색을,이 시간을 많이 논의되고있다. 맵핑을 통해 뷰 모델과 DTO 사이의 관계를 잃어 버리므로 하나에 대한 업데이트로 다른 모델을 업데이트하지 않습니다. ID를 리턴하거나, DTO를 리턴하거나,'out' 매개 변수를 사용하여 ID를 생성하거나, ID를 생성하여'Create()'에 전달하십시오. 후자는 contra-pragmatic으로 볼 수있는 Command Query Responsibility Segregation (CQRS)을 준수합니다. – CodeCaster
'SaveChanges'가 호출 된 후,'t.ID'는 그 값을 가져야합니다. 그래서,'_unitOfWork.Commit();'뒤에'entity.ID = t.ID;'를 설정하면 그것은 당신을 위해 작동 할 것입니다. –
@Adil no, 엔티티는 viewmodel에서 매핑 된 DTO에서 매핑됩니다. DTO에 대한 업데이트는 뷰 모델을 업데이트하지 않습니다. – CodeCaster