Object attributes coming null in Query

Asked

Viewed 43 times

1

Would anyone like to tell me why in my query, the attributes of the COR object, are coming null? I make that same appointment for Sizes, and you bring me the result waiting. however, when making the same query, for the class Color, it finds the objects, but brings the information nulla.

Imagem da consulta da classe Tamanho Imagem da Consulta da Classe Cor

The query to fetch the Product:

Produto produto = db.ProdutoDb.Find(id);

A query Sizes

   var geral = db.ProdutoDb
                                    .Where(x => x.CodProduto == produto.CodProduto)
                                    .Select(x => x.Tamanho)
                                    .ToList();

The query Color:

var Cores = db.ProdutoDb
                                    .Where(x => x.CodProduto == produto.CodProduto)
                                    .Select(x => x.Cor)
                                    .ToList();

The class Cor:

 public class Cor
    {
        [Key]
        public int CorId{ get; set; }
        public string Descricao { get; set; }
    }

The Size class:

public class Tamanho
    {
        [Key]
        public int Id { get; set; }
        public int Descricacao { get; set; }
    }

The Product class:

public class Produto
    {
        public Produto()
        {
            this.Categoria = new HashSet<Categoria>().ToList();
        }

        #region Atributos
        [Key]
        public int ProdutoId { get; set; }
        [Required(ErrorMessage ="o nome deve ser preenchido")]
        public string NomeDoProduto { get; set; }
        [Required(ErrorMessage = "o codigo deve ser preenchido")]
        public string CodProduto { get; set; }
        [Required(ErrorMessage ="o preço deve ser preenchido")]
        public decimal PrecoDeAtacado { get; set; }
        [Required(ErrorMessage = "o preço deve ser preenchido")]
        public decimal PrecoDeVarejo { get; set; }
        [MaxLength(1200)]
        public string Informacoes { get; set; }
        [MaxLength(1200)]
        public string Decricao { get; set; }
        public bool? Disponibilidade { get; set; }
        public int Quatidade { get; set; }


        #endregion

        #region Chaves Estrangeiras
        public int CorId { get; set; }
        public virtual Cor Cor { get; set; }
        public int TamanhoId { get; set; }
        public virtual Tamanho Tamanho { get; set; }
        public int ImagemId { get; set; }
        public virtual Imagem Imagem { get; set; }
        public virtual IEnumerable<Comentario> Comentario { get; set; }
        public virtual List<Categoria> Categoria { get; set; }

        #endregion
    }

Interestingly, the colors are registered and appearing in the list normally, the query even returns me result, however, with null attributes, IE, Id and Description does not come.

2 answers

1


These objects are not being loaded probably because you didn’t use the ICollection<T> to inform you that you want to do Lazy Loading.

Probably the Tamanho must be coming null too.

Add the following lines to these classes and see if it works:

public class Cor
{
    [Key]
    public int CorId{ get; set; }
    public string Descricao { get; set; }

    public virtual ICollection<Produto> { get; set; }
}

public class Tamanho
{
    [Key]
    public int Id { get; set; }
    public int Descricacao { get; set; }

    public virtual ICollection<Produto> { get; set; }
}

Another detail is that you didn’t use the DataAnnotations to clarify the relationship between the entities Tamanho and Cor with Product:

[ForeignKey("CorId")]
public virtual Cor Cor { get; set; }
[ForeignKey("Id")]
public virtual Tamanho Tamanho { get; set; }
  • It worked, thank you.

  • @Rafaelsteps that good! Mark as answer when possible that can help other people. :)

1

If you are sure that color exists maybe it is something related to Lazy loading, you can try to force this loading using include, example:

var Cores = db.ProdutoDb
                                    .Where(x => x.CodProduto == produto.CodProduto)
                                    .Include(x=>x.Cor)
                                    .Select(x => x.Cor)
                                    .ToList();
  • I don’t know why, but INCLUDE doesn’t work after the WHERE clause. but anyway I’ve got it, thank you very much.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.