Return data from 2 Entity framework tables

Asked

Viewed 911 times

0

I have the following table: Moving -moving -Clienteid -Productoid

When I select a particular customer I want to list all drives in which they are along with the product. what I would call it inside the controller?

That’s what I thought so far.

    public ActionResult MovimentacaoCliente(int id)
    {
        int clienteid = 0;

        using (Db db = new Db())
        {
            Cliente cli = db.Cliente.FirstOrDefault(x => x.Id == id);
            clienteid = cli.Id;

            List<MovimentacaoVM> pedidos = db.Movimentacao.Where(x => x.ClienteId == clienteid).ToArray().Select(x => new MovimentacaoVM(x)).ToList();

            return View();
        }
    }

My Model Drive for you to understand:

public int MovimentacaoId { get; set; }

public int ClienteId { get; set; }
public int ProdutoId { get; set; }
public string ProdutoNome { get; set; }
public string ClienteNome { get; set; }

public DateTime DataCriacao { get; set; }


[ForeignKey("ProdutoId")]
public virtual Produto Produto { get; set; }

[ForeignKey("ClienteId")]
public virtual Cliente Cliente { get; set; }

Drive

public class MovimentacaoVM
{
public MovimentacaoVM()
{

}

public MovimentacaoVM(Movimentacao row)
{
    MovimentacaoId = row.MovimentacaoId;
    ClienteId = row.ClienteId;
    DataCriacao = row.DataCriacao;
    ProdutoId = row.ProdutoId;
    ClienteNome = row.ClienteNome;
    ProdutoNome = row.ProdutoNome;
}
[Key]
public int MovimentacaoId { get; set; }
public int ProdutoId { get; set; }
public int ClienteId { get; set; }
public string ProdutoNome { get; set; }
public string ClienteNome { get; set; }
public DateTime DataCriacao { get; set; }

public IEnumerable<SelectListItem> Produtos { get; set; }
public IEnumerable<SelectListItem> Cliente { get; set; }
  • 1

    It would be nice to post the model Movimentacao also. Because if you have a navigation property there, just use the property, otherwise you would have to make a Join.

  • yes I posted now

1 answer

2


So you want to list all the moves a customer made and pull all the products from those drives ?

Then you have 2 relations an n : n (of products for drives) and 1 : n (customer and drives).

So what would I do,

Client class

public class Cliente {
    public int Id { get; set; }
    // outras propriedades ...
    List<Movimentacao> Movimentacao { get; set; }  
}

Class Movement

public class Movimentacao {
    public int Id { get; set; }
    // outras propriedades ...

    public Int ClienteId { get; set; }
    public Cliente Cliente { get; set; }
    List<MovimentacaoProdutos> MovProdutos { get; set; }  
}

Class Movicaoproducts

public class MovimentacaoProdutos {
    public int ProdutoId { get; set; }
    public int MovimentacaoId { get; set; }
    public Produto Produto{ get; set; }
    public Movimentacao Movimentacao { get; set; }

    // outras propriedades ...  
}

Product class

public class Produto {
    public int Id { get; set; }
    // outras propriedades ...

    List<MovimentacaoProdutos> MovProdutos { get; set; }  
}

And how I would consult

public ActionResult MovimentacaoCliente(int id)
{
    using (Db db = new Db())
    {
        List<Movimentacao> movs = db.Movimentacao.Include(m => m.Cliente)
                          .Include(m => m.MovProdutos).ThenInclude(mp => mp.Produto)
                          .Where(m => m.ClienteId == id);

        // e assim você vai conseguir ter acesso ao cliente e aos produtos
        // desculpa se faltou alguma coisa, fiz agora de cabeça, mas a logica seria +/- essa.

        return View();
    }
}

I hope I’ve helped :)

Forte Abraço.

Browser other questions tagged

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