繁体   English   中英

如何在不延迟加载Entity Framework的情况下加载嵌套实体?

[英]How to load nested entities without lazy loading in Entity Framework?

我有以下模型:

public class Order 
{
    public int Id {get; set;}
    public int Number {get; set;}
    public virtual ICollection<OrderDetail> Details {get; set;}
}

public class OrderDetail
{
    public int Id {get; set;}
    public int OrderId {get; set;}
    public virtual Product Product {get; set;}
}

public class Product
{
    public int Id {get; set;}
    public int Number {get; set;}
    public string Description {get; set;}
}

在我的OrderRepository中,我加载了一个完整的订单,如下所示:

public override Order Get(int id)
{
    return base.Get(id, x => x.Details);
}

基本方法是:

public virtual T Get(int id, params Expression<Func<T, object>>[] include)
{
    if (include.Any())
    {
        var set = include.Aggregate<Expression<Func<T, object>>, IQueryable<T>>
                  (dbSet, (current, expression) => current.Include(expression));

        return set.SingleOrDefault<T>(x => x.Id == id);
    }

    return dbSet.Find(id);
}

上面的部分工作正常,因为它加载了Order和OrderDetails。 但是,我也想为每个详细信息加载相关的产品,以便我也可以在列表中显示产品说明。

如何改进上述方法以允许我这样做?

只需添加另一个带有嵌套Select参数即可:

public override Order Get(int id)
{
    return base.Get(id, x => x.Details, x => x.Details.Select(z => z.Product));
}

参见MSDN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM