Skip to content

Nested Interface Projection Not Working #258

@JMPSequeira

Description

@JMPSequeira

Hello,

Using .Net Core 3.1 and EF Core 3.1.6.

Given the following entities

public class Product 
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public decimal BasePrice { get; set; }
    public virtual ICollection<ProductTarif> ProductTarifs { get; set; }
}

public class Tarif
{
    public int Id { get; set; }
    public decimal Value { get; set; }
    public virtual ICollection<ProductTarif> ProductTarifs { get; set; }
}

And the following interfaces

public interface IProduct
{
    int Id { get; set; }
    string Name { get; set; }
    decimal BasePrice { get; set; }
    ICollection<ITarif> Tarifs { get; set; }
}

public interface ITarif
{
    int Id { get; set; }
    decimal Value { get; set; }
}

And the following configuration

TypeAdapterConfig<Tarif, ITarif>.NewConfig().PreserveReference(true);

TypeAdapterConfig<Product, IProduct>
    .NewConfig()
    .Map(p => p.Tarifs, p => p.ProductTarifs.Select(pt => pt.Tarif))
    .PreserveReference(true);

I'd expect for the following projection to work, as it does with the object references and Adapt<>,

var projection = ctx.Products.AsNoTracking()
         .Include(p => p.ProductTarifs)
         .ThenInclude(p => p.Tarif)
         .Take(1)
         .ProjectToType<IProduct>()
         .FirstOrDefault();

But instead I'm presented with an exception:

System.ArgumentException: 'Expression of type 'System.Linq.Expressions.Expression`1[System.Func`2[Tryouts.Common.Tarif,GeneratedType_2]]' cannot be used for parameter of type 'System.Linq.Expressions.Expression`1[System.Func`2[Tryouts.Common.Tarif,Tryouts.Common.ITarif]]' of method 'System.Linq.IQueryable`1[Tryouts.Common.ITarif] Select[Tarif,ITarif](System.Linq.IQueryable`1[Tryouts.Common.Tarif], System.Linq.Expressions.Expression`1[System.Func`2[Tryouts.Common.Tarif,Tryouts.Common.ITarif]])' (Parameter 'arg1')'

Am I doing something wrong?

Greatly appreciate your help.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions