【问题标题】:The property '' on entity type could not be found since upgrading to EF 2.1自升级到 EF 2.1 以来,找不到实体类型的属性“”
【发布时间】:2018-08-28 15:40:14
【问题描述】:

我已将我的应用升级到 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();

stacktrace 很大,所以我只包含了错误和前一行。

System.InvalidOperationException:实体类型的属性“” 找不到“PromotionTopicJoin”。确保物业 存在并已包含在模型中。在 Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.MemberAccessBindingExpressionVisitor.GetPropertyPath(表达式 表达式,QueryCompilationContext queryCompilationContext,出 QuerySourceReferenceExpression querySourceReferenceExpression)

仅供参考,我的 Microsoft.EntityFrameworkCoreMicrosoft.EntityFrameworkCore.SqlServer 版本从 2.0.1 变为 2.1.0

【问题讨论】:

  • 当你添加一个新的迁移时,它是否包含一些东西?
  • 哪个属性?请在此处提及该物业
  • 所以你得到的正是那个消息,带有一个空字符串?
  • @Gert 确认,消息是准确的(带有空字符串):(
  • @alsami 不,没什么

标签: c# asp.net-core entity-framework-core


【解决方案1】:

不幸的是,这清楚地表明了 EF Core 查询翻译回归错误。

因此,您所能做的就是将其报告给EF Core Issue Tracker。提供相同的最小重现(删除 .Where(x =&gt; x.Is_Active).OrderByDescending(x =&gt; 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(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2013-07-05
    • 2015-10-14
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多