Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao recuperar propriedade do objeto na View

Olá,

Estou tendo dificuldade em recuperar uma informação na View.

Criei uma view que tem como modelo uma lista de produto, na definição da classe produto, existe uma propriedade do tipo Categoria.

Preciso recuperar a categoria do produto em questão. No banco de dados as informações são salvas aparentemente corretas, existe o produto e a categoria, assim como a ligação (Id) entre eles.

Tentei criar uma ViewModel e alimentar manualmente a informação mas também não deu certo.

O erro que ocorre é de NullReference, debugando realmente percebi que a informação de Categoria ao buscar os produtos pelo DbSet vem como null, não entendi o motivo.

Erro: NullReferenceException: Object reference not set to an instance of an object. AspNetCore.ViewsPedido_BuscaDeProdutos_cshtml+d__9.MoveNext() in BuscaDeProdutos.cshtml + var testeNomeCategoria = produto.Categoria.Nome;

<!-- BuscaDeProduto.cshtml -->
@model List<Produto>

@{     
    foreach (var produto in Model)
    {
        var testeNomeCategoria = produto.Categoria.Nome;
    }
}
...
//Controller
        public IActionResult BuscaDeProdutos()
        {
            return View(produtoRepository.GetProdutos());
        }
...
// modelo
    public class Categoria : BaseModel
    {
        public int Id { get; set; }
        public string Nome { get; set; }
    }

    public class Produto : BaseModel
    {
        ...
        [Required]
        public Categoria Categoria { get; private set; }
        ...
        public Produto(string codigo, string nome, decimal preco, Categoria categoria)
        {
            ...
            this.Categoria = categoria;
        }
    }

// ApplicationContext.cs

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
         ...
            modelBuilder.Entity<Categoria>().HasKey(t => t.Id);

            modelBuilder.Entity<Produto>().HasKey(t => t.Id);
            modelBuilder.Entity<Produto>().HasOne(t => t.Categoria);
        ...
       }
2 respostas
solução!

Olá David!

Acredito que passei pelo mesmo produto que você.

Como está seu GetProdutos()? Ele precisa incluir a categoria além do próprio produto. Antes do .ToListAsync() coloque também um .Include(p => p.Categoria);

Com isso, será inclusa a categoria baseada na chave estrangeira do banco de dados dentro da sua lista de produtos.

Agora estou no aguardo para saber se deu certo!

Oi Fabiano, tudo certo?

Realmente faltou implementar o ".Include" para a Categoria no método GetProdutos().

Muito obrigado pelo auxílio!

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