4
respostas

Erro, Linq mudando false para true

Linq está mudando uma propriedade booleana para true.

Minhas classes: CLASSE LOCAL

    public class Local
    {
        public int Id { get; set; }
        public bool Desativado { get; set; }
        public int ContatoId { get; set; }
        public Contato Contato { get; set; }
    }

CLASSE CONTATO

    public class Contato
    {
        public int Id { get; set; }
        public List<Telefone> Telefones { get; set; }
    }

Na base de dados a propriedade "Desativado" de "Local" é false. Quando busco locais sem incluir telefones a propriedade "Desativado" é recuperada corretamente.

Esse código não da erro:

var lista = await _repoLocal.All
                .Include(c => c.Contato)
                .ToListAsync();

Mas ao incluir a lista de telefones na busca, "Desativado" é recuperado como true em todos os registros!

var lista = await _repoLocal.All
                .Include(c => c.Contato.Telefones)
                .ToListAsync();

Alguém saberia o que está ocorrendo?

4 respostas

Eduardo, tem um comando para ver o resultado do sql gerado pelo EntityFramework no console pra ver o resultado da query, mas tente esse linq aqui e veja se busca corretamente:

var lista = await _repoLocal.All
    .Include(c => c.Contato)
    .Include(c => c.Contato.Telefones)
    .ToListAsync();

Assim você está dizendo para o entity trazer o join das tabelas Local, Contato e Telefones.

Se pude ajudar, marque a resposta como solucionada. Obrigado! Abraço.

Murilo Ramos Parra, boa tarde, ainda não resolveu... Pegando sua ideia e adicionando uma condição para deixar o resultado ainda mais impressionante...

var lista = await _repoLocal.All
                .Include(c => c.Contato)
                .Include(c => c.Contato.Telefones)
                .Where(d => d.Desativado == false)
                .ToListAsync();

Todos os locais estão vindo como true... Mas se eu tirar os telefones o erro não ocorre:

var lista = await _repoLocal.All
                .Include(c => c.Contato)
                .Where(d => d.Desativado == false)
                .ToListAsync();

Se no banco de dados está tudo certo e a consulta pra mi é simples e não deve ter nada errado, pode ser até o mapeamento feito no entity... Talvez vendo o código completo pra fazer aqui e te ajudar...

Murilo Ramos, como erro não ocorria no ambiente de produção, resolvi dropar o banco do homolog e subi com o dump da produção. O problema foi resolvido. Só Deus sabe o que causava o problema!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software