Свойство '' типа сущности не может быть найдено с момента обновления до EF 2.1 - PullRequest
0 голосов
/ 28 августа 2018

Я обновил свое приложение до Ef Core 2.1, и запрос, который раньше работал в EF 2.0, теперь выдает ошибки.

Я использую варианты одного и того же запроса в разных таблицах, и все они дают сбой с одной и той же ошибкой после обновления

Вот мои модели:

public class Promotion  
{
    public int PromotionId { get; set; }   
    // I've removed the other fields  

    public virtual ICollection<PromotionTopicJoin> PromotionTopicJoins {get; set;}

}

public class PromotionTopic  
{
    public int PromotionTopicId { get; set; }     

    [MaxLength(50)]
    [Required]
    public string Name { get; set; }

    public virtual ICollection<PromotionTopicJoin> PromotionTopicJoins {get; set;}


}

public class PromotionTopicJoin
{
    public int PromotionId { get; set; }
    public Promotion Promotion { get; set; }
    public int PromotionTopicId { get; set; }
    public PromotionTopic PromotionTopic { get; set; }

}

И вот запрос, который я запускаю:

    return await _context.PromotionTopics
        .Where(p => p.PromotionTopicId == TopicId)
        .SelectMany(p => p.PromotionTopicJoins)
        .Select(pc => pc.Promotion)
        .Select(p => new PromotionDTO
        {
            PromotionId = p.PromotionId,
            // I've removed all the other fields
            Topics = p.PromotionTopicJoins.Select(itj => itj.PromotionTopic.Name).ToList()

        })
        .Where(x => x.Is_Active)
        .OrderByDescending(x => x.Created)
        .ToListAsync();

Трассировка стека довольно велика, поэтому я включил только ошибку и предыдущую строку.

System.InvalidOperationException: свойство '' для типа сущности «PromotionTopicJoin» не найден. Убедитесь, что собственность существует и был включен в модель. в Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.MemberAccessBindingExpressionVisitor.GetPropertyPath (Expression выражение, QueryCompilationContext queryCompilationContext, out QuerySourceReferenceExpression querySourceReferenceExpression)

К вашему сведению, мои версии Microsoft.EntityFrameworkCore и Microsoft.EntityFrameworkCore.SqlServer перешли с 2.0.1 на 2.1.0

1 Ответ

0 голосов
/ 28 августа 2018

К сожалению, это четкое указание на ошибку регрессии перевода запросов EF Core.

Таким образом, все, что вы можете сделать, это сообщить об этом EF Core Issue Tracker . Обеспечьте одинаковое минимальное воспроизведение (удалите .Where(x => x.Is_Active) и .OrderByDescending(x => x.Created) - они не компилируются в настоящее время, но проблема воспроизводит их без них. Также воспроизводится с ToList, так что это не связано с асинхронностью).

В качестве обходного пути, пока проблема не будет устранена, запустите запрос непосредственно из объекта объединения (похоже, проблема связана с SelectMany навигацией):

return await _context.Set<PromotionTopicJoin>()
    .Where(pc => pc.PromotionTopicId == TopicId)
    .Select(pc => pc.Promotion)
    .Select(p => new PromotionDTO
    {
        PromotionId = p.PromotionId,
        // I've removed all the other fields
        Topics = p.PromotionTopicJoins.Select(itj => itj.PromotionTopic.Name).ToList()    
    })
    .Where(x => x.Is_Active)
    .OrderByDescending(x => x.Created)
    .ToListAsync(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...