private async Task <DtoPersona> GuardarPersonaAsync(Entidades.Persona personaAGuardar) { await ValidarDatosObligatoriosPersona(personaAGuardar); using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)) { Entidades.Persona persona = new Entidades.Persona(); if (personaAGuardar.Id == 0) { persona = await PersonaRepositorio.InsertarAsync(personaAGuardar); } else { persona = await ObtenerPersonaPrivadoAsync(personaAGuardar.Id); persona.Apellido = personaAGuardar.Apellido; persona.FechaNacimiento = personaAGuardar.FechaNacimiento; persona.IdPais = personaAGuardar.IdPais; persona.IdSexo = personaAGuardar.IdSexo; persona.IdTipoDocumento = personaAGuardar.IdTipoDocumento; persona.Nombre = personaAGuardar.Nombre; persona.NumeroDocumento = personaAGuardar.NumeroDocumento; foreach (PersonaContacto contacto in personaAGuardar.PersonaContacto) { string valorContacto = contacto.Valor.Trim(); PersonaContacto personaContacto = await PersonaContactoRepositorio.ObtenerUnoAsync(c => c.Valor == valorContacto); if (personaContacto == null) { await PersonaContactoRepositorio.InsertarAsync(new PersonaContacto { IdPersona = persona.Id, Valor = valorContacto }); } else { personaContacto.Valor = valorContacto; await PersonaContactoRepositorio.ActualizarAsync(personaContacto); } } for (int i = 0; i < persona.PersonaContacto.Count; i++) { if (!personaAGuardar.PersonaContacto.Exists(p => p.Valor.Trim() == persona.PersonaContacto[i].Valor)) { await PersonaContactoRepositorio.EliminarAsync(persona.PersonaContacto[i]); } } await PersonaRepositorio.ActualizarAsync(persona); } DtoPersona dtoPersona = await ObtenerPersonaAsync(persona.Id); transaction.Complete(); return(dtoPersona); } }