2

I have an entity with some optional relationships and I'm doing a GetAllIncluding(someProperties) but the navigation properties keeps in null when the GetAll is done.

All relation in the include (Cliente, ClienteFuturo) keeps in null, and always almost one of them has a value on ClienteId or ClienteFuturoId

Here is my GetAll Method:

    public override Task<PagedResultDto<SolicitudPrestamoDto>> GetAll(PagedAndSortedRequest input)
    {
        var lista = new List<SolicitudPrestamo>();
        var query = Repository.GetAllIncluding(x => x.ClienteFuturo, x => x.Cliente);

        query = CreateFilteredQuery(input);
        query = ApplySorting(query, input);
        query = FilterHelper<SolicitudPrestamo>.FilerByProperties(input.FilterProperties, query);

        lista = query
            .Skip(input.SkipCount)
            .Take(input.MaxResultCount)
            .ToList();

        var result = new PagedResultDto<SolicitudPrestamoDto>(query.Count(), ObjectMapper.Map<List<SolicitudPrestamoDto>>(lista));
        return Task.FromResult(result);
    }

Here is the entity relation configuration:

            entidad.HasOne(e => e.Cosolicitante)
               .WithMany()
               .HasForeignKey(e => e.CosolicitanteId)
               .HasConstraintName("ForeignKey_SolicitudPrestamo_Cosolicitante")
               .OnDelete(DeleteBehavior.Restrict);

            entidad.HasOne(e => e.Cliente)
               .WithMany()
               .HasForeignKey(e => e.ClienteId)
               .HasConstraintName("ForeignKey_SolicitudPrestamo_Cliente")
               .OnDelete(DeleteBehavior.Restrict);

            entidad.HasOne(e => e.CosolicitanteCliente)
               .WithMany()
               .HasForeignKey(e => e.CosolicitanteClienteId)
               .HasConstraintName("ForeignKey_SolicitudPrestamo_CosolicitanteCliente")
               .OnDelete(DeleteBehavior.Restrict);

            entidad.HasOne(e => e.ClienteFuturo)
               .WithMany()
               .HasForeignKey(e => e.ClienteFuturoId)
               .HasConstraintName("ForeignKey_SolicitudPrestamo_ClienteFuturo")
               .OnDelete(DeleteBehavior.Restrict);

Here is my entity:

public class SolicitudPrestamo : AuditedEntity<int>
{
    public string Identificador { get; set; }
    public int CantidadCuotas { get; set; }
    public double Monto { get; set; }
    public string FormaPago { get; set; }
    public DateTime Fecha { get; set; }
    public string Proposito { get; set; }
    public string Referencia { get; set; }
    public EstadoSolicitud Estado { get; set; }
    public int SucursalId { get; set; }
    public virtual Sucursal Sucursal { get; set; }
    public int? ClienteId { get; set; }
    public virtual Cliente Cliente { get; set; }
    public int? CosolicitanteClienteId { get; set; }
    public virtual Cliente CosolicitanteCliente { get; set; }
    public int? ClienteFuturoId { get; set; }
    public virtual ClienteFuturo ClienteFuturo { get; set; }
    public int ClasificacionPrestamoId { get; set; }
    public virtual ClasificacionPrestamo ClasificacionPrestamo { get; set; }
    public int? OficialNegocioId { get; set; }
    public virtual OficialNegocio OficialNegocio { get; set; }
    public int? CobradorPrestamoId { get; set; }
    public virtual CobradorPrestamo CobradorPrestamo { get; set; }
    public int? CosolicitanteId { get; set; }
    public virtual ClienteFuturo Cosolicitante { get; set; }
    public IEnumerable<GarantiaPrestamoSolicitud> ListaGarantiaPrestamo { get; set; }
    public IEnumerable<ReferenciaPrestamo> ListaReferencias { get; set; }
    public List<GarantiaPrestamo> ListaGarantias { get; set; } 
}

Sorry for my English.

José Polanco
  • 574
  • 4
  • 19
  • 1
    can you provide the SQL query that is constructed by EF on every step (initial query with `GetAllIncluding`, after `CreateFilteredQuery`, etc, just change code slightly and debug on every transformation), [here](https://stackoverflow.com/questions/1412863/how-do-i-view-the-sql-generated-by-the-entity-framework) is a thread how you can capture that. I believe joins a lost somewhere during transformations but it will be more clear once we have SQL :) . – fenixil Aug 24 '19 at 04:25

1 Answers1

0
    protected override IQueryable<SolicitudPrestamo> CreateFilteredQuery(PagedAndSortedRequest input)
    {
        return Repository.GetAll().
                        WhereIf(!input.Filter.IsNullOrWhiteSpace(), x =>
                            x.Identificador.StartsWith(input.Filter, StringComparison.CurrentCultureIgnoreCase) ||
                            x.FormaPago.StartsWith(input.Filter, StringComparison.CurrentCultureIgnoreCase) ||
                            x.Proposito.StartsWith(input.Filter, StringComparison.CurrentCultureIgnoreCase) ||
                            x.Referencia.StartsWith(input.Filter, StringComparison.CurrentCultureIgnoreCase)
                        );
    }

Thanks illia-popov the problem is that in the CreatedFilteredQuery Method I forget to do the GetAllIncluding

Thanks for help.!

José Polanco
  • 574
  • 4
  • 19