Efcore: preview-8 wrong mapping of navigation property of an owned entity in a simple query

Created on 28 Aug 2019  路  3Comments  路  Source: dotnet/efcore

Hi everybody, it's my firs issue report, please be patient if i'm doing something wrong :)
With following query:
```c#
var query = dataContext.Set();
var result = await query.Select(a => new WorkPlaceView()
{
Id = a.WorkPlace.Id,
Address = a.WorkPlace.Address.StreetName + ", " + a.WorkPlace.Address.City,
Location = a.WorkPlace.Address.Location,
Name = a.WorkPlace.Name,
TimeSlot = a.TimeSlot,
Status = a.Status

}).ToArrayAsync();

And this entities:

```c#
public class OperatorWorkPlace
{
    [Key]
    public int Id { get; set; }
    public Guid OperatorId { get; set; }
    public Guid WorkPlaceId { get; set; }
    public TimeSpan TimeSlot { get; set; }
    public OperatorWorkPlaceStatus Status { get; set; }
    public DateTimeOffset? DeleteTime { get; set; }
    public virtual Operator Operator { get; set; }
    public virtual WorkPlace WorkPlace { get; set; }
    public virtual ICollection<WorkWeekDay> WorkWeekDays { get; set; }
    public virtual ICollection<WorkDay> WorkDays { get; set; }
}

[Owned]
public class Address
{
    public string City { get; set; }
    public string PostCode { get; set; }
    public string StreetName { get; set; }
    public string District { get; set; }
    public string Country { get; set; }
    public Point Location { get; set; }
}

public class WorkPlace
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Address Address { get; set; }
    public string TimeZone { get; set; }
    public Guid? PictureId { get; set; }
    public virtual Resource Picture { get; set; }
    public virtual ICollection<OperatorWorkPlace> Operators { get; set; }
    public virtual ICollection<OperatorProduct> Products { get; set; }
}

I have following exception:

System.ArgumentException: 'Address' is not a member of type 'DocSpecial.Data.Entities.OperatorWorkPlace' (Parameter 'propertyOrFieldName')
   at System.Linq.Expressions.Expression.PropertyOrField(Expression expression, String propertyOrFieldName)
   at Microsoft.EntityFrameworkCore.Internal.ExpressionExtensions.BuildPropertyAccess(Expression root, List`1 path, List`1 navigations)
   at Microsoft.EntityFrameworkCore.Query.NavigationExpansion.Internal.NavigationPropertyUnbindingVisitor.VisitExtension(Expression extensionExpression)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at Microsoft.EntityFrameworkCore.Query.NullConditionalExpression.VisitChildren(ExpressionVisitor visitor)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitBinary(BinaryExpression node)
   at System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitBinary(BinaryExpression node)
   at System.Linq.Expressions.BinaryExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitMemberAssignment(MemberAssignment node)
   at System.Linq.Expressions.ExpressionVisitor.VisitMemberBinding(MemberBinding node)
   at System.Linq.Expressions.ExpressionVisitor.Visit[T](ReadOnlyCollection`1 nodes, Func`2 elementVisitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitMemberInit(MemberInitExpression node)
   at System.Linq.Expressions.MemberInitExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitLambda[T](Expression`1 node)
   at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
   at Microsoft.EntityFrameworkCore.Query.NavigationExpansion.Internal.NavigationExpansionReducingVisitor.VisitExtension(Expression extensionExpression)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at Microsoft.EntityFrameworkCore.Query.QueryOptimizer.Visit(Expression query)
   at Microsoft.EntityFrameworkCore.Query.QueryCompilationContext.CreateQueryExecutor[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Storage.Database.CompileQuery[TResult](Expression query, Boolean async)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.CompileQueryCore[TResult](IDatabase database, Expression query, IModel model, Boolean async)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass12_0`1.<ExecuteAsync>b__0()
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQueryCore[TFunc](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func`1 compiler)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.ExecuteAsync[TResult](Expression query, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1.GetAsyncEnumerator(CancellationToken cancellationToken)
   at System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.GetAsyncEnumerator()
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToArrayAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
   at DocSpecial.Core.OperatorWorkPlaceListHandler.ExecuteWorkAsync(OperatorWorkPlaceListCommand command, ICoExecutionContext ctx) 

Apparently, instead of mapping the navigation property "Address" to the WorkPlace entity, maps it in OperatorWorkPlace

c# Location = a.WorkPlace.Address.Location
It worked fine until preview-5

Further technical details

EF Core version: 3.0.0-preview8.19405.11
Database Provider: SQL Server
Operating system: Windows 10 Pro
IDE: Visual Studio 2019 16.3.0 Preview 2.0

closed-fixed customer-reported type-bug

All 3 comments

Can you try daily builds? I believe this issue has been fixed after preview8.

Yes, the issue is fixed in build 5.0.0-alpha1.19427.3
Do you plan to release it in preview-9 ?

Fixed in new nav expansion. This issue will be fixed in preview9 release & subsequent 3.0 RTM.

Was this page helpful?
0 / 5 - 0 ratings