none
Erro ao chamar dado relacionado Entity Framework RRS feed

  • Pergunta

  • Boa noite pessoal,

    Tenho duas tabelas relacionadas, Cliente e Pedidos , quando tento chamar o nome do cliente com Pedido.Cliente.Nome ele da erro, segue o codigo para ficar mais claro

        List<Model.Pedido> listaPedido = new List<Model.Pedido>();
    
        try
        {
          var select = from f in entites.Pedidoes
                 select new { f.IdPedido, NomeCliente = f.Cliente.Nome, f.ValorPedido, f.FormaPagamento, f.DataPedido };
    
          foreach (var item in select)
          {
            Model.Pedido pedido = new Model.Pedido();
            pedido.IdPedido = item.IdPedido;
            pedido.Cliente.Nome = item.NomeCliente;
            pedido.ValorPedido = item.ValorPedido;
            pedido.FormaPagamento = item.FormaPagamento;
            pedido.DataPedido = item.DataPedido;
    
            listaPedido.Add(pedido);
          }
        }
    

    se eu chamo soh o nome sozinho via entite e jogo em uma variavel funciona, mas quando tento jogar no objeto ele da erro.


    Rafael Poveda
    sexta-feira, 29 de julho de 2011 00:08

Respostas

  • Olá Rafael,

    Antes de atribuir o nome para a instância pedido, tente inicializar o cliente, dessa forma:

     pedido.Cliente = new Cliente()
    


    Seu código do foreach deve ficar assim:

    Model.Pedido pedido = new Model.Pedido();
    pedido.IdPedido = item.IdPedido;
    pedido.Cliente = new Cliente();
    pedido.Cliente.Nome = item.NomeCliente;
    pedido.ValorPedido = item.ValorPedido;
    pedido.FormaPagamento = item.FormaPagamento;
    pedido.DataPedido = item.DataPedido;
    listaPedido.Add(pedido);
    


    Se esta não for a solução, tente postar a mensagem de erro...

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    • Marcado como Resposta Rafael.Poveda domingo, 31 de julho de 2011 12:09
    sexta-feira, 29 de julho de 2011 11:56
    Moderador

Todas as Respostas

  • Rafael tenta fazer assim

    var item in select.toList()

     


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
    sexta-feira, 29 de julho de 2011 11:31
  • Olá Rafael,

    Antes de atribuir o nome para a instância pedido, tente inicializar o cliente, dessa forma:

     pedido.Cliente = new Cliente()
    


    Seu código do foreach deve ficar assim:

    Model.Pedido pedido = new Model.Pedido();
    pedido.IdPedido = item.IdPedido;
    pedido.Cliente = new Cliente();
    pedido.Cliente.Nome = item.NomeCliente;
    pedido.ValorPedido = item.ValorPedido;
    pedido.FormaPagamento = item.FormaPagamento;
    pedido.DataPedido = item.DataPedido;
    listaPedido.Add(pedido);
    


    Se esta não for a solução, tente postar a mensagem de erro...

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    • Marcado como Resposta Rafael.Poveda domingo, 31 de julho de 2011 12:09
    sexta-feira, 29 de julho de 2011 11:56
    Moderador
  • Na hora que eu jogo na grid view ele nao aparece o nome do cliente Fernando, voce sabe me dizer o pq?
    Rafael Poveda
    sexta-feira, 29 de julho de 2011 22:26
  • Rafael,

    Isso depende do modo como vc está listando os dados no GridView.

    Eu precisaria que vc mostrasse como está fazendo o bind do grid, e se vc está utilizando ou não o recurso de auto geração de colunas.

     

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    sábado, 30 de julho de 2011 00:22
    Moderador
  • Eu estou só jogando o list no grid, com auto geracao de colum sim.
    Rafael Poveda
    sábado, 30 de julho de 2011 00:31
  • Olá Rafael,

    O problema é o seguinte, quanto vc faz o Bind do DataGrid desta forma, ele automaticamente apenas lista os atributos publicos que sejam tipos primitivos ou Strings.

    Atributos cujos tipos sejam outras classes (Nested Objects) não são renderizados. A fim de resolver esse problema existem duas soluções:

    1 - Criar uma classe própria para renderização dos atributos, isto é, criar uma classe que servirá apenas como 'casca' para exibição dos dados no GridView. Pesquise pelo Design Patterns chamado MVP (Model-View-Presentation) e vc verá que essa é uma prática bastante comum. Segue link: http://forums.asp.net/t/1657787.aspx/1?GridView+AutoGenerateColumns+problem

     

    2 - Utilizar uma coluna template, cujo conteúdo seja um Label, cujo atributo Text seja igual a 'Bind("Cliente.Nome")'. Vc pode achar referências sobre isso neste link: http://www.apterasoftware.com/Blog/Post/09-12-02/Declarative_Databinding_of_Nested_Object_Properties_to_GridView_Columns.aspx

     

    []s!

     


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    sábado, 30 de julho de 2011 00:50
    Moderador