내 데이터베이스에서 쿼리를 만들기 위해 Dapper를 사용하고 있습니다. 그리고 이러한 쿼리 중 하나에서 나는 예상하지 못했던 에러 메시지없이 결과를 얻었습니다.
우연히 Postman에서 요청을 요청하고 있는데이 요청은 내 WebAPI에 도달하지만 응답을받지 못하고 요청이 닫힙니다.
코드 디버깅 Dapper를 사용하여 SQL 쿼리를 수행하는 메서드에 들어가서 문자열 필드에 값을 할당하려고 할 때 응용 프로그램은 오류 메시지를 표시하지 않고 모든 클래스에서 처리를 제공합니다.
아래는 내 코드입니다.
private async Task<ClassificacaoRiscoModelRequest> ObterClassificacaoRisco(string protocolo)
{
string query = $@"SELECT
tbResult.conteudoClassificacao ->> 'neoplasia' AS neoplasia,
tbResult.conteudoClassificacao ->> 'escalaGlasgow' AS escalaGlasgow,
tbResult.conteudoClassificacao ->> 'outrasDoencas' AS outrasDoencas,
tbResult.conteudoClassificacao ->> 'temNefropatia' AS temNefropatia,
tbResult.conteudoClassificacao ->> 'aberturaOcular' AS aberturaOcular,
tbResult.conteudoClassificacao ->> 'outrosDetalhes' AS outrosDetalhes,
tbResult.conteudoClassificacao ->> 'queixaPaciente' AS queixaPaciente,
tbResult.conteudoClassificacao ->> 'respostaMotora' AS respostaMotora,
tbResult.conteudoClassificacao ->> 'repostaVerbal' AS repostaVerbal,
tbResult.conteudoClassificacao ->> 'temOutrasDoencas' AS temOutrasDoencas,
tbResult.conteudoClassificacao ->> 'resultadoEscalaComa' AS resultadoEscalaComa,
tbResult.conteudoClassificacao ->> 'temDiabetesPaciente' AS temDiabetesPaciente,
tbResult.conteudoClassificacao ->> 'corClassificacaoRisco' AS corClassificacaoRisco,
tbResult.conteudoClassificacao ->> 'temDoencaRespiratoria' AS temDoencaRespiratoria,
tbResult.conteudoClassificacao ->> 'temCardiopatiaPaciente' AS temCardiopatiaPaciente,
tbResult.conteudoClassificacao ->> 'temHipertensaoPaciente' AS temHipertensaoPaciente,
tbResult.conteudoClassificacao ->> 'medicamentoEmUsoPaciente' AS medicamentoEmUsoPaciente,
tbResult.conteudoClassificacao ->> 'escalaGlasgowJustificativa' AS escalaGlasgowJustificativa,
tbResult.conteudoClassificacao ->> 'medicamentoEmUsoPacienteDetalhes' AS medicamentoEmUsoPacienteDetalhes,
tbResult.conteudoClassificacao ->> 'cboDesc' AS cboDesc,
tbResult.conteudoUsuario ->> 'cpf' AS Cpf,
tbResult.conteudoUsuario ->> 'nome' AS Nome,
tbResult.conteudoEspecialidade AS nomeEspecialidade,
tbCausaExterna.c007_conteudo ->> 'nome' AS nomecausaexterna,
tbAvaliacao.c007_conteudo ->> 'htg' AS htg,
tbAvaliacao.c007_conteudo ->> 'sato' AS sato,
tbAvaliacao.c007_conteudo ->> 'pulso' AS pulso,
tbAvaliacao.c007_conteudo ->> 'alergia' AS alergia,
tbAvaliacao.c007_conteudo ->> 'pressaoArt' AS pressaoArt,
tbAvaliacao.c007_conteudo ->> 'temperatura' AS temperatura,
tbAvaliacao.c007_conteudo ->> 'pesoAproximado' AS pesoAproximado,
tbAvaliacao.c007_conteudo ->> 'alergiaDetalhes' AS alergiaDetalhes,
tbResult.datacriacao AS dataCriacao
FROM
(
SELECT
tbClassificacao.c007_conteudo - 'guidUsuario' - 'Especialidade' - 'Protocolo' AS conteudoClassificacao,
tbUsuario.c007_conteudo AS conteudoUsuario,
tbEspecialidade.c007_conteudo ->> 'nome' AS conteudoEspecialidade,
tbClassificacao.datacriacao
FROM
PUBLIC.tb007_conteudodado AS protocolo
INNER JOIN (
SELECT
( classificacao.c007_conteudo -> 'Protocolo' ->> 'c007_id' ) :: UUID AS idProtocolo,
classificacao.c007_conteudo,
classificacao.c007_datacriacao AS datacriacao
FROM
PUBLIC.tb007_conteudodado AS classificacao
WHERE
classificacao.c047_id :: TEXT = ANY (
VALUES
( '79628e0d-6654-41f9-a50c-44da64c885e6' ))) tbClassificacao ON tbClassificacao.idProtocolo = protocolo.c007_id
INNER JOIN (
SELECT
row_to_json ( r ) AS c007_conteudo
FROM
(
SELECT
usuario.c022_id AS c007_id,
usuario.c022_cpf AS cpf,
usuario.c022_nome AS nome
FROM
PUBLIC.tb022_usuario AS usuario
WHERE
c022_ativo = TRUE
) r
) tbUsuario ON tbUsuario.c007_conteudo ->> 'c007_id' = ANY (
VALUES
( tbClassificacao.c007_conteudo ->> 'guidUsuario' ))
INNER JOIN (
SELECT
especialidade.c007_id,
especialidade.c007_conteudo
FROM
PUBLIC.tb007_conteudodado AS especialidade
WHERE
especialidade.c047_id :: TEXT = ANY (
VALUES
( 'a1ee6e41-5b68-4c06-81b0-ec2bfe2186ec' ))) tbEspecialidade ON tbEspecialidade.c007_id :: TEXT = ( tbClassificacao.c007_conteudo ->> 'Especialidade' ) :: JSONB ->> 'c007_id'
WHERE
protocolo.c007_id :: TEXT = ANY (
VALUES
( '{protocolo}' ))) tbResult
INNER JOIN (
SELECT
causaexterna.c007_id,
causaexterna.c007_conteudo
FROM
PUBLIC.tb007_conteudodado AS causaexterna
WHERE
causaexterna.c047_id :: TEXT = ANY (
VALUES
( '3cd7c000-1ef9-480a-bc17-6ce0aa662dcd' ))) tbCausaExterna ON tbCausaExterna.c007_id :: TEXT = ( tbResult.conteudoClassificacao ->> 'CausaExterna' ) :: JSONB ->> 'c007_id'
INNER JOIN (
SELECT
avaliacao.c007_id,
avaliacao.c007_conteudo
FROM
PUBLIC.tb007_conteudodado AS avaliacao
WHERE
avaliacao.c047_id :: TEXT = ANY (
VALUES
( '680c86c0-b78e-4ae5-93ff-288e26590cc0' ))) tbAvaliacao ON tbAvaliacao.c007_id :: TEXT = ( tbResult.conteudoClassificacao ->> 'Avaliacao' ) :: JSONB ->> 'c007_id'
ORDER BY
tbResult.datacriacao DESC";
var conteudoClassificacaoRisco = await _connection.QueryAsync<ClassificacaoRiscoModelRequest>(query);
return conteudoClassificacaoRisco.FirstOrDefault();
}
정보를 추출하기 위해 사용하는 템플릿 클래스는 다음과 같이 그려져 있습니다.
public class ClassificacaoRiscoModelRequest : BaseModelRequest
{
public string NomeEspecialidade { get; set; }
public string NomeCausaExterna { get; set; }
public DateTime DataCriacao { get; set; }
//Conteudo Classificação
public bool EscalaGlasgow { get; set; }
public bool TemNefropatia { get; set; }
public bool TemOutrasDoencas { get; set; }
public bool TemDiabetesPaciente { get; set; }
public bool TemDoencaRespiratoria { get; set; }
public bool TemCardiopatiaPaciente { get; set; }
public bool TemHipertensaoPaciente { get; set; }
public bool MedicamentoEmUsoPaciente { get; set; }
public string CboDesc { get; set; }
public string Neoplasia { get; set; }
public string OutrasDoencas { get; set; }
public string AberturaOcular { get; set; }
public string OutrosDetalhes { get; set; }
public string QueixaPaciente { get; set; }
public string RespostaMotora { get; set; }
public string RespostaVerbal { get; set; }
public string ResultadoEscalaComa { get; set; }
public string CorClassificacaoRisco { get; set; }
public string EscalaGlasgowJustificativa { get; set; }
public string MedicamentoEmUsoPacienteDetalhes { get; set; }
//Conteudo Usuário
public string Cpf { get; set; }
public string Nome { get; set; }
//Conteudo Avaliação
public string Htg { get; set; }
public string Sato { get; set; }
public string Pulso { get; set; }
public bool Alergia { get; set; }
public string PressaoArt { get; set; }
public string Temperatura { get; set; }
public string PesoAproximado { get; set; }
public string AlergiaDetalhes { get; set; }
}
정확히 "CorClassificacaoRisco"속성의 SET 메서드에 도착하면 응용 프로그램이 디버그 모드를 종료하고 요청에 대한 응답을받지 못합니다.
누구든지 그것이 무엇인지 알고 있거나 이미이 문제를 경험 한 적이 있다면 솔루션을 소개해주십시오.
Richardissimo의 팁에 따라 Dapper를 사용하여 데이터베이스 액세스 코드를 try-catch 블록에 넣음으로써 예외를 잡을 수있었습니다. 이 오류는 부울이어야하지만 정보가없는 (true / false) 데이터베이스에 저장된 값 때문에 발생합니다. Dapper가 클래스에서 부울로 선언 된 변수에 값을 할당하려고 시도하면 예외가 발생합니다.