/// <summary>
        /// </summary>
        public UsuarioDTO Login(UsuarioDTO usuario)
        {
            if (string.IsNullOrEmpty(usuario.Email) || string.IsNullOrEmpty(usuario.Password))
            {
                Exception excepcion = new Exception("Usuario o contraseña inválidos.");
                excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                throw excepcion;
            }
            if (string.IsNullOrWhiteSpace(usuario.Email) || string.IsNullOrWhiteSpace(usuario.Password))
            {
                Exception excepcion = new Exception("Usuario o contraseña inválidos.");
                excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                throw excepcion;
            }
            if (!new EmailAddressAttribute().IsValid(usuario.Email))
            {
                Exception excepcion = new Exception("El usuario no es un correo electrónico válido.");
                excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                throw excepcion;
            }

            DB_MAPRI_Entities context           = null;
            UsuarioDTO        usuarioEncontrado = null;
            T_Usrs            usuarioResult     = null;

            try
            {
                context = new DB_MAPRI_Entities();

                usuarioResult = context.T_Usrs.AsParallel().FirstOrDefault(
                    e => e.Email == usuario.Email.ToLower() && e.Password == usuario.Password && e.DeleteDate == null);

                if (usuarioResult == null)
                {
                    Exception excepcion = new Exception("No existe un usuario registrado con esos datos.");
                    excepcion.TryAddInfo(ParameterTypes.Title, "Error al iniciar sesión.");
                    throw excepcion;
                }

                usuarioEncontrado = UsuarioDTO.EntityToDTO(usuarioResult);
            }
            catch (Exception exception)
            {
                throw exception;
            }
            finally
            {
                context?.Dispose();
            }

            return(usuarioEncontrado);
        }