【问题标题】:Is it possible to load nested navigation properties using EntityEntry.Reference?是否可以使用 EntityEntry.Reference 加载嵌套导航属性?
【发布时间】:2019-02-14 00:52:36
【问题描述】:

以这些示例类为例:

class TemplatePart
{
    public PartStock stock {get; set;}
    ...other POCOs
}

class PartStock
{
    public Part part {get; set;}
    ...other POCOs
}

class Part
{
    public PartName name {get; set;}
    ...other POCOs
}

现在,假设我已经有一个TemplatePart 的实体。我可以这样做:

var entry = context.Entry(templatePart);
entry.Reference(x => x.PartStock).Load();

这将加载PartStock 的导航属性。但是我该怎么做:

entry.Reference(x => x.PartStock.Part).Load();

这会产生异常:

表达式“x => x.PartStock.Part”不是有效的属性 表达。该表达式应该表示一个简单的属性访问: 't => t.MyProperty'。参数名称:propertyAccessExpression

是否有一些替代方案仍然使用我已经拥有的entry?如果不需要的话,我不想再次使用 Include 重新加载整个内容。

我正在使用 EntityFramework Core 2。

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:

    您可以使用Query()Include / ThenIncludeLoad 方法的组合,而不是直接调用Load 方法:

    entry.Reference(x => x.PartStock)
        .Query()
        .Include(x => x.Part)
        .Load();
    

    【讨论】:

    • 如果我们通过字符串属性名获取引用呢?生成的 IQueryable 不是通用的(我们事先不知道类型),并且它没有 Include 扩展方法。
    • 刚刚发现您可以使用dynamic。如Reference<dynamic>("propertyName").Query()。现在这个IQueryable<dynamic> 具有扩展方法Include(),它也可以与属性字符串名称一起使用。
    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多