public bool InsertUpdateTipoUsuario(TiposUsuario tipoPersonal, List <Acceso> accesos, out string Message) { Message = string.Empty; bool result = false; try { var id = _tipoUsuarioRepository.InsertOrUpdate <int>(tipoPersonal); tipoPersonal.ID = id; Sql query = new Sql() .Select("*").From("AccesosTipoUsuario") .Where("ID_TipoUsuario = @0", id); List <AccesosTipoUsuario> _detallesActuales = _accesosTipoUsuarioRepository.GetByFilter(query); // Eliminar detalles que no existen en los actuales foreach (var detalleNoExiste in _detallesActuales.Where(p => !accesos.Any(p2 => p2.ID == p.ID_Acceso))) { _accesosTipoUsuarioRepository.Remove(detalleNoExiste); } //Insertar o Actualizar detalles existentes o nuevos foreach (var detalle in accesos) { query = new Sql() .Select("*").From("AccesosTipoUsuario") .Where("ID_TipoUsuario = @0 and ID_Acceso = @1", id, detalle.ID); AccesosTipoUsuario accesosPersonal = _accesosTipoUsuarioRepository.Get(query); if (accesosPersonal == null) { accesosPersonal = new AccesosTipoUsuario(); accesosPersonal.ID_Acceso = detalle.ID; accesosPersonal.ID_TipoUsuario = id; } _accesosTipoUsuarioRepository.InsertOrUpdate <int>(accesosPersonal); } Message = "Tipo de Usuario guardado " + tipoPersonal.Nombre + "con exito"; result = true; } catch (Exception ex) { Message = "TipoUsuario No pudo ser guardado Error: " + ex.Message; } return(result); }