I'm using Dapper to make queries in my database. And in one of those queries I have a result that I was not expecting, and without any error message.
What happens is that I am making a request request from Postman, and this request reaches my WebAPI, but I do not get a response and the request closes.
Debugging the code I got into the method where I do the SQL query using Dapper, and when trying to assign value to the string field the application simply gives dispose in all classes without displaying error messages.
Below is my code:
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();
}
The template class I am using to extract the information is drawn as follows:
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; }
}
Exactly when it arrives in the SET method of the property "CorClassificacaoRisco" the application simply exits from debug mode and I get no response from my request.
If anyone knows what it is or has already experienced this problem, please introduce me to the solution.
Following the tip of Richardissimo I was able to catch the exception by placing the database access code with Dapper within a try-catch block. The error was caused by a value saved in the database that should be boolean but had no information (true / false). When Dapper tried to assign value to a variable that was declared as Boolean in the class an exception was thrown.