Problem with EntityFramework Core include

0

Good afternoon. I am developing an Api Web with ASP.Net core but I have a problem with the EF Core. It turns out that I have a BBDD SQL server but it is not relational (By this I mean that I do not have the tables related to each other in the Database) and when doing include () in one of the tables.

To summarize.

I have a header table and a line table. In the controller when I do the query to the database, it brings me correctly the data of the header but the data of the lines does not.

I put some screenshots of how I have it configured.

[HttpGet]
public IEnumerable<CabeceraPedidoProveedor> GetOrdenes()
{
    var ret = _ctx.CabeceraPedidoProveedor.Where(x=>x.SeriePedido == "F")
                 .Include(e=> e.LineasPedidoProveedor).ToList();
    return ret;

}

/ Header ModelProviderProvider.cs

 public partial class CabeceraPedidoProveedor
 {

     public CabeceraPedidoProveedor()
     {
         LineasPedidoProveedor = new HashSet<LineasPedidoProveedor>();
     }

     public Guid IdPedidoPro { get; set; }
     public short CodigoEmpresa { get; set; }
     public short EjercicioPedido { get; set; }
     public string SeriePedido { get; set; }
     public int NumeroPedido { get; set; }
     public DateTime FechaPedido { get; set; }
     public short NumeroLineas { get; set; }
     public string CodigoProveedor { get; set; }
     public string RazonSocial { get; set; }

     public virtual Enumerable<LineasPedidoProveedor>LineasPedidoProveedor     { get; set; } }

/ Model LineasPedidoProveedor.cs      public partial class LineasPedidoProvider      {

     public short CodigoEmpresa { get; set; }
     public short EjercicioPedido { get; set; }
     public string SeriePedido { get; set; }
     public int NumeroPedido { get; set; }

     //public short CodigoEmpresaCabecera { get; set; }
     //public short EjercicioPedidoCabecera { get; set; }
     //public string SeriePedidoCabecera { get; set; }
     //public short NumeroPedidoCabecera { get; set; }
     public short Orden { get; set; }
     public Guid LineasPosicion { get; set; }

     public virtual CabeceraPedidoProveedor Cabecera { get; set; }}

// Context

public partial class MiContext : DbContext
    {

        public MiContext (DbContextOptions options
          ):base(options)
        {

        }

        public virtual DbSet<CabeceraPedidoProveedor> CabeceraPedidoProveedor { get; set; }
        public virtual DbSet<LineasPedidoProveedor> LineasPedidoProveedor { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
              base.OnModelCreating(modelBuilder);

              modelBuilder.Entity<CabeceraPedidoProveedor>(entity =>
              {
                entity.HasKey(e => new { e.CodigoEmpresa, e.EjercicioPedido, e.SeriePedido, e.NumeroPedido });

                entity.HasIndex(e => new { e.CodigoEmpresa,e.EjercicioPedido,e.SeriePedido,e.NumeroPedido})
                    .HasName("CabeceraPedidoProveedor_Pedido");

                entity.ToTable("CabeceraPedidoProveedor");

                  entity.Property(e => e.CodigoEmpresa).HasDefaultValueSql("((0))");

                  entity.Property(e => e.EjercicioPedido).HasDefaultValueSql("((0))");

                  entity.Property(e => e.SeriePedido)
                    .HasMaxLength(10)
                    .IsUnicode(false)
                    .HasDefaultValueSql("('')");

                entity.Property(e => e.NumeroPedido)
                      .HasDefaultValueSql("((0))");

                entity.Property(e => e.NumeroLineas).HasDefaultValueSql("((0))");

                entity.Property(e => e.FechaPedido)
                      .HasColumnType("datatime")
                      .HasDefaultValueSql("(getDate())");

                //entity.HasMany(e => e.LineasPedido);

                entity.HasMany(e => e.LineasPedidoProveedor)
                      .WithOne(e => e.Cabecera).HasConstraintName("FK_Lineas_Cabecera");
                      //.HasForeignKey(e=>new { e.CodigoEmpresa, e.EjercicioPedido, e.SeriePedido, e.NumeroPedido });
              });

              modelBuilder.Entity<LineasPedidoProveedor>(entity=>
              {

                entity.HasKey(e => new { e.CodigoEmpresa, e.EjercicioPedido, e.SeriePedido, e.NumeroPedido, e.Orden,e.LineasPosicion });

                //entity.HasIndex(e => new {e.CodigoEmpresa,e.EjercicioPedido,e.SeriePedido,e.NumeroPedido,e.Orden,e.LineasPosicion })
                //      .HasName("LineasPedidoProveedor_Pedido");

                entity.ToTable("LineasPedidoProveedor");

                entity.Property(e => e.CodigoEmpresa).HasDefaultValueSql("((0))");

                entity.Property(e => e.EjercicioPedido).HasDefaultValueSql("((0))");

                entity.Property(e => e.SeriePedido)
                      .HasMaxLength(10)
                      .HasDefaultValueSql("('')");
                entity.Property(e => e.NumeroPedido).HasDefaultValueSql("((0))");

                entity.HasOne(d => d.Cabecera)
                   .WithMany(p => p.LineasPedidoProveedor);

              });
        }

My exit is this:

[{"idPedidoPro":"18a351a6-c228-401c-b90c-dd9eb66278f9","codigoEmpresa":9999,"ejercicioPedido":2017,"seriePedido":"F","numeroPedido":108,"fechaPedido":"2017-09-14T00:00:00","numeroLineas":4,"codigoProveedor":"000000","razonSocial":"PROVEED VARIOS","lineasPedidoProveedor":[]}]

As you can see, the data in the parent table (the header) brings them well, but LineasPEdidoProveedor comes in white. I made sure you have data.

I do not know where to put a hand to this. I await your help.

Greetings!

    
asked by Oscar Mañas Garcia 15.09.2017 в 16:53
source

1 answer

0

Try using

var ret = _ctx.CabeceraPedidoProveedor
                .Include(e=> e.LineasPedidoProveedor)
                .Where(x=>x.SeriePedido == "F")
                .ToList();

or always first the Include()

I raise it because I always saw the use of this method defined at the beginning

Loading Related Data

    
answered by 22.09.2017 в 23:55