Problem with select in table with relationship many to many

1

I have the following scenario:

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

        public virtual ICollection<ProdutosPedido> ProdutosPedidos { get; set; }

        public DateTime CreateDate { get; set; }

        public DateTime UpdateDate { get; set; }
    }

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

        public string Descricao { get; set; }

        public string Valor { get; set; }

        public DateTime DataCadastro { get; set; }

        public virtual ICollection<ProdutosPedido> ProdutosPedidos { get; set; }
    }

 public class ProdutosPedido
    {
        [Key]
        public int ProdutosPedidoId { get; set; }

        public int ProdutoId { get; set; }

        public int PedidoId { get; set; }

        public int Quantidade { get; set; }

        public virtual Produto Produto { get; set; }

        public virtual Pedido Pedido { get; set; }

        public virtual Status Status { get; set; }
    }

I can save the Order with the Products without any problem, but I want to make a master details table to show the Order with its Products.

Follow the Controller's code

public ActionResult TodosOsPedidos()
        {
            var pedidos = _db.ProdutosPedidos.Include("Pedido").Include("Produto").Where(x => x.Pedido.Id == 2);
            return View(pedidos);
        }

View Code:

<table class="table table-condensed table-hover table-striped table-responsive">
    <thead>
        <tr>
            <th style="width: 85px">
                Pedido Nº
            </th>
            <th style="text-align: left">
                Solicitante
            </th>
            <th style="width: 120px">
                Data do Pedido
            </th>
            <th style="width: 120px">
                Atualizado Em
            </th>

            <th style="width: 65px"></th>
        </tr>
    </thead>

    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.PedidoId)
                </td>
                <td style="text-align: left">
                    @Html.DisplayFor(modelItem => item.Pedido.Franqueado.NomeFantasia)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Pedido.CreateDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Pedido.UpdateDate)
                </td>

                <td>
                    <a href="@Url.Action("Edit", "Produtos", new { @id = item.PedidoId })" title="Editar" class="btn btn-xs btn-primary tool">
                        <span class="glyphicon glyphicon-edit"></span>
                    </a>
                    <a href="javascript:void(0)" rel="@item.PedidoId" title="Excluir" class="btn btn-xs btn-danger tool delete-produto">
                        <span class="glyphicon glyphicon-trash"></span>
                    </a>
                </td>
            </tr>
            <tr>
            <td style="width: 100%"  colspan="5">
                <h5>Produtos</h5>
                <table class="table table-condensed table-hover table-striped table-responsive">
                    <thead>
                        <tr>
                            <th>Descrição</th>
                            <th>Quantidade</th>
                            <th>Valor Unitário</th>
                            <th>Valor Total</th>
                            <th>Status</th>
                            <th></th>
                        </tr>
                    </thead>
                    <tbody>

                            <tr>
                                <td>@Html.DisplayFor(itemModel => item.Produto.Descricao)</td>
                                <td>@Html.DisplayFor(itemModel => item.Quantidade)</td>
                                <td>@Html.DisplayFor(itemModel => item.Produto.Valor)</td>
                                <td>@Html.DisplayFor(itemModel => item.Produto.Descricao)</td>
                                <td>@Html.DisplayFor(itemModel => item.Produto.Descricao)</td>
                                <td></td>
                            </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        }
        </tbody>
</table>

I want to leave as the example below:

Nº Pedido     Solicitante          Data Criacao   Data Atualizacao
      1            Fornecedor 01        23/05/2014        27/05/2014
----------------------------------------------------------------------------------------------
Descrição     Qntd     Valor Uni     Valor Total         Status       #
Produto 01      02          3,50                7,00        Em Proc    editar

Nº Pedido     Solicitante          Data Criacao   Data Atualizacao
      2            Fornecedor 04       23/05/2014        27/05/2014
----------------------------------------------------------------------------------------------
Descrição     Qntd     Valor Uni     Valor Total         Status       #
Produto 01      02          3,50                7,00        Em Proc    editar
Produto 03      01          3,50                3,50        Em Proc    editar

But requests are repeating, all two ID requests are listed with their products, not just 1 ID 2 Request and below related products.

    
asked by anonymous 06.11.2014 / 21:27

1 answer

1

Several things to fix:

1. Controller

public ActionResult TodosOsPedidos()
{
    var pedido = _db.Pedidos.Include(p => p.ProdutosPedidos).ToList();
    return View(pedido);
}

Make sure that there is in the header the using System.Data.Entity; statement.

Avoid selecting by association.

2. View

Notice that here I change the @model to IEnumerable<Pedido> so iteration becomes more intuitive.

Missed requests:

<table class="table table-condensed table-hover table-striped table-responsive">
    <thead>
        <tr>
            <th style="width: 85px">
                Pedido Nº
            </th>
            <th style="text-align: left">
                Solicitante
            </th>
            <th style="width: 120px">
                Data do Pedido
            </th>
            <th style="width: 120px">
                Atualizado Em
            </th>

            <th style="width: 65px"></th>
        </tr>
    </thead>

    <tbody>
        @foreach (var item in Model) // Model é IEnumerable<Pedido>
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Id)
                </td>
                <td style="text-align: left">
                    @Html.DisplayFor(modelItem => item.Franqueado.NomeFantasia)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.CreateDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.UpdateDate)
                </td>

                <td>
                    <a href="@Url.Action("Edit", "Produtos", new { @id = item.PedidoId })" title="Editar" class="btn btn-xs btn-primary tool">
                        <span class="glyphicon glyphicon-edit"></span>
                    </a>
                    <a href="javascript:void(0)" rel="@item.PedidoId" title="Excluir" class="btn btn-xs btn-danger tool delete-produto">
                        <span class="glyphicon glyphicon-trash"></span>
                    </a>
                </td>
            </tr>
            <tr>
            <td style="width: 100%"  colspan="5">
                <h5>Produtos</h5>
                <table class="table table-condensed table-hover table-striped table-responsive">
                    <thead>
                        <tr>
                            <th>Descrição</th>
                            <th>Quantidade</th>
                            <th>Valor Unitário</th>
                            <th>Valor Total</th>
                            <th>Status</th>
                            <th></th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach (var produtoPedido in item.ProdutosPedidos)
                            <tr>
                                <td>@Html.DisplayFor(itemModel => produtoPedido.Produto.Descricao)</td>
                                <td>@Html.DisplayFor(itemModel => produtoPedido.Quantidade)</td>
                                <td>@Html.DisplayFor(itemModel => produtoPedido.Produto.Valor)</td>
                                <td>@Html.DisplayFor(itemModel => produtoPedido.Produto.Descricao)</td>
                                <td>@Html.DisplayFor(itemModel => produtoPedido.Produto.Descricao)</td>
                                <td></td>
                            </tr>
                        }
                    </tbody>
                </table>
            </td>
        </tr>
        }
        </tbody>
</table>
    
06.11.2014 / 21:42