Datagridview Entity Framework
22/04/2015
0
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.
Victor Seraphin
Posts
24/04/2015
Alisson Santos
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.
30/04/2015
Elessandro Poças
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/
Clique aqui para fazer login e interagir na Comunidade :)