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を取得し、私は整数としてCreateメソッドの戻り値の型を変更する必要がありますか、この作品を作るための別の方法は何ですか? SaveChangesメソッドがヒットします後
public void Create(TDTO entity)
{
T t = _mapper.Map<T>(entity);
_repository.Create(t);
_unitOfWork.Commit();
}
トンのIDが設定されつつあるが、私は戻って、コントローラの私のDTOオブジェクトのIDを取得するために失敗しています。
アドバイスはありますか?あなたは、単に、すなわち、右の行の後に、右の変更をコミットした後entity.Id = t.Id;
を追加することができます
てみ検索を、これは時間の多くを議論してきました。ビューモデルとDTOの関係はマッピングによって失われます。したがって、一方を更新すると他方が更新されません。 IDを返すか、DTOを返すか、 'out'パラメータを使ってIDを生成するか、あらかじめIDを生成して' Create() 'に渡します。後者は、対照的であると見ることができるコマンドクエリ責任分担(Command Query Responsibility Segregation:CQRS)に準拠する。 – CodeCaster
'SaveChanges'が呼ばれた後、あなたの' t.ID'はその値を持つべきです。したがって、 '_unitOfWork.Commit();'の後に 'entity.ID = t.ID;'を設定すると、それはうまくいくはずです。 –
@Adil no、エンティティは、ビューモデルからマップされたDTOからマップされます。 DTOへの更新はviewmodelを更新しません。 – CodeCaster