// GET: Cliente/Details/5 public ActionResult Details(int?id, string tipoPessoa) { ClienteViewModel viewModel; try { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } //Preenche o modelo de acordo com o tipo de pessoa if (tipoPessoa == "Física") { //Utilização de eager loading para recuperas as informações das entidades Cidade e UF relacionadas a pessoa PessoaFisica pessoaFisica = _pessoaFisicaApp.GetCityStateEagerLoadingById(Convert.ToInt32(id)); //Utilizando AutoMapper para atribuição dos dados do model para a viewmodel var config = new MapperConfiguration(cfg => { cfg.CreateMap <PessoaFisica, ClienteViewModel>() .ForMember(p => p.Cidade, map => map.UseValue(pessoaFisica.Cidade)) .ForMember(p => p.TipoPessoa, map => map.UseValue(TipoPessoa.Física)) .ForMember(p => p.UF, map => map.UseValue(pessoaFisica.Cidade.UF)); }); viewModel = config.CreateMapper().Map <PessoaFisica, ClienteViewModel>(pessoaFisica); } else { PessoaJuridica pessoaJuridica = _pessoaJuridicaApp.GetCityStateEagerLoadingById(Convert.ToInt32(id)); var config = new MapperConfiguration(cfg => { cfg.CreateMap <PessoaJuridica, ClienteViewModel>() .ForMember(p => p.Cidade, map => map.UseValue(pessoaJuridica.Cidade)) .ForMember(p => p.TipoPessoa, map => map.UseValue(TipoPessoa.Jurídica)) .ForMember(p => p.UF, map => map.UseValue(pessoaJuridica.Cidade.UF)); }); viewModel = config.CreateMapper().Map <PessoaJuridica, ClienteViewModel>(pessoaJuridica); } if (viewModel == null) { return(HttpNotFound()); } //Retorna o viewModel preenchido para a view return(View(viewModel)); } catch (Exception ex) { throw ex; } }