属性“a”不是实体类型“b”的导航属性。为什么不?

时间:2018-02-21 10:28:34

标签: linq entity-framework-core ef-core-2.0

我正在尝试使用此查询从Label加载产品标识符ProductIdentifiers列表(即产品标识符的名称,例如“EAN”,“产品编号”等) :

ICollection<ProductIdentifierInType> typeIds =
            _context.ProductIdentifiersInTypes
            .Include(t => t.Identifier.Label)
            .OrderBy(o => o.SortOrder).ToList();

VS给了我t.Identifier.Label的智能感知。解决方案编译得很好。这是我得到的运行时错误:

  

InvalidOperationException:属性“Label”不是实体类型“ProductIdentifier”的导航属性。 'Include(string)'方法只能与'。'一起使用。分隔的导航属性名称列表。

以下是相关的模型类:

public class ProductIdentifierInType
{
    public int Id { get; set; }
    public int ProductTypeId { get; set; }
    public int SortOrder { get; set; }

    public ProductIdentifier Identifier { get; set; }
    public ProductType Type { get; set; }
}

public class ProductIdentifier
{
    public int Id { get; set; }
    public string Label { get; set; }
    public int SortOrder { get; set; }

    public ICollection<ProductIdentifierInType> TypeIdentifiers { get; set; }
}

我的DbContext:

public class MyStoreContext : DbContext // IdentityDbContext
{
    public MyStoreContext(DbContextOptions options) : base(options) { }

    // some unrelated tables ...

    public DbSet<ProductIdentifierInType> ProductIdentifiersInTypes { get; set; }
    public DbSet<ProductIdentifier> ProductIdentifiers { get; set; }

    // some more, unrelated tables ...
}

我尝试继承IdentityDbContext,就像this question中的解决方案一样,但这没有任何区别。

有什么问题?

1 个答案:

答案 0 :(得分:5)

正如评论中所指出的,Include仅适用于Navigation属性。

而不是.Include(t => t.Identifier.Label)尝试只执行.Include(t => t.Identifier)

然后使用List访问Label属性。