Datagridview Entity Framework

22/04/2015

Boa noite a todos;

Estou começando a estudar sobre o EF. Estou criando um sistema básico para cadastro de produtos com categorias. Consigo cadastrar normalmente as categorias e lista-las. O problema esta na hora de listar os produtos. Ao invés de ao invés de ser exibido o conteudo da minha foreign key, esta aparecendo o nome do projeto.nome da classe da categoria:
[img]http://arquivo.devmedia.com.br/forum/imagem/408066-20150422-193216.jpg[/img]

    public class Categoria
    {
        public int Id { get; set; }
        public string Descricao { get; set; }

        public virtual IEnumerable<Produto> Produtos { get; set; }
    }


    public class Produto
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public Categoria  Categoria { get; set; }

        public virtual ICollection<ListaDeProduto> ListaDeProdutos { get; set; }
    }


//Metodo Listar Categoria

        public IEnumerable<Produto> Listar()
        {
            var grade = (from g in banco.Produtos
                select g ).ToList();
            return grade;
        }



Código form1
 public void CarregarGrid()
        {
            dgvProduto.DataSource = null;
            dgvProduto.DataSource = appProduto.Listar();



            cbbCategoria.DataSource = appCategoria.Listar();
            cbbCategoria.ValueMember = "Id";
            cbbCategoria.DisplayMember = "Descricao";
        }

  private void btnCadastrar_Click(object sender, EventArgs e)
        {
            int categoriaID = Convert.ToInt32(cbbCategoria.SelectedValue);

            Produto objProduto = new Produto
            {
                Nome = txtProduto.Text,
                Categoria = appCategoria.Listar().First(x=> x.Id == categoriaID )
            };
            appProduto.Salvar(objProduto);
            CarregarGrid();
        }



Sou iniciante em C# e Entity Framework.

Respostas

24/04/2015

Alisson

Victor bom dia.

Poderia verificar como está gravado no banco de dados essa informação?
Pois não vi nada de anormal no seu código.

Se puder mandar esse exemplo para testar aqui e conseguir te auxiliar seria bom.
Responder Citar

30/04/2015

Elessandro Poças

Victor,

Se você estiver usando CODE First a sua classe produto deveria ser da seguinte forma:

public class Produto
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public int Categoria_Id { get; set; }
        public Categoria  Categoria { get; set; }
 
        public virtual ICollection<ListaDeProduto> ListaDeProdutos { get; set; }
    }



Você vai precisar alterar a forma de como você está fazendo a sua consulta, pesquise sobre tipos anônimos usando Linq to Entity.
Um simples exemplo:
Public IEnumerable<Produto> ConsultaProdutos()
{
         using (seu_contexto ctx = new seu_contexto)
         {
                var consulta = from p in ctx.Produtos.ToList()
                                       select new
                                       {
                                            p.Produto_Id,
                                            p.Descricao,
                                            p.Categoria_Id
                                        };
                 return consulta.ToList();
         }
}



Outra dica: Evite usar chave primarias nomeadas somente como ID, procure ser mas específico no seu caso Produto_ID, pois já tive alguns problemas com este tipo de nomenclatura.

Acesse esse link, lá você vai conseguir sanar muitas dúvidas: http://www.entityframeworktutorial.net/
Responder Citar