我如何得到一个实体和它所有相关的实体

本文关键字:实体 一个 何得 | 更新日期: 2023-09-27 18:11:32

我正在使用EF6,我试图获得一个实体列表。对于列表中的每个实体,我希望它在一次调用中填充子实体。

例如:

Order.Id
Order.ColletionOfItems
Item.Id
Item.OrderId
Item.ProductName
Item.CollectionOfOptions
Option.Name
Option.Value
using(var db = DbContext)
{   //I want to fill in everything during this call as I am using all of it in the
    //The calling function.
    OrderList = db.Orders.Select().include //This is where I am stuck
    return OrderList;
}

我希望返回的集合包含所有订单、与单个订单关联的所有项目以及与单个项目关联的所有选项。

我如何构建我的linq语句来做到这一点?有比.Include("MyMajicString")更好的方法吗?我应该搜索什么,因为我的搜索几乎没有得到可接受的回复?

我如何得到一个实体和它所有相关的实体

您需要使用Include扩展方法:

using(var db = new YourContext())
{   
    var OrderList = db.Orders.Include(o=>o.ColletionOfItems.Select(i=>i.CollectionOfOptions));
    return OrderList;
}

您也可以使用DbQuery.Include方法,该方法接收作为参数的导航路径。您希望作为string加载的属性:

using(var db = new YourContext())
{   
    var OrderList = db.Orders.Include("ColletionOfItems.CollectionOfOptions");
    return OrderList;
}

但是最好使用第一个,因为它是强类型的。使用第二种方法,您可以在键入某个属性的名称时出错,也可以更改导航的名称。属性,忘记重命名路径中的属性。

另一件事,加载大量数据时要小心。使用该查询,您将加载所有订单和相关属性,因此,在加载应用程序所需的信息之前,请先尝试过滤(在调用Include之后调用Where方法)。