public async Task <ActionResult> newRegistroMedico([FromBody] CreateRegistroMedicoDTO model) { using (var transaction = context.Database.BeginTransaction()) { logger.LogInformation("BeginTransaction create registro medico by user {0}", getUser()); try { getUser(); var persona = await fundabiem.searchPersonaByDPI(model.paciente.dpi); if (persona.Count() > 0) { return(BadRequest("El DPI ya existe")); } var PersonaPaciente = await fundabiem.newPersona(model.paciente); //crea la direccion del paciente await fundabiem.newDirection(model.direccionPaciente, PersonaPaciente.idPersona); //crea el paciente var pacienteR = await fundabiem.newPatient(model.HistorialClinico, PersonaPaciente.idPersona); //agrega el registro medico await fundabiem.newRegistroMedico(pacienteR.idPaciente); //creamos todos los familiares del paciente, hago un forEach para saber quien es el encargado foreach (var familiar in model.familiaresPaciente) { //agrega la persona var fm = mapper.Map <CreatePersonaDTO>(familiar); var prsona = await fundabiem.newPersona(fm); //agrega el familiar await fundabiem.newFamiliar(prsona.idPersona, pacienteR.idPersona, familiar.parentezco); //si es encargado, hacemos el registro if (familiar.isManager) { //registramos la direccion del encargado await fundabiem.newDirection(model.direccionEncargado, prsona.idPersona); //agregamos el registro a la tabla de personas encargadas await fundabiem.newPersonaEncargada(prsona.idPersona, pacienteR.idPaciente); } } transaction.Commit(); logger.LogInformation("Commit transaction create registro medico"); return(Ok()); } catch (Exception ex) { logger.LogInformation("RollBack transaction create registro medico"); logger.LogError(ex.ToString()); return(BadRequest()); } } }