加载相关对象与查询连接

时间:2010-11-22 11:08:05

标签: linq-to-entities entity-framework-4

使用实体框架4 load方法通过外键加入相比,是否存在差异/最佳做法,以便检索儿童数据?

例如,如果我有订单订单线,我应该编写一个使用inner join orderId 检索集合,还是应该像 Orders.OrderLines.Load 那样填充实体集合?

由于

1 个答案:

答案 0 :(得分:4)

这取决于您是否希望自动获取这些关联,或明确要求它们。

例如,如果您这样做:

Order order = ctx.Orders.SingleOrDefault();
OrderLines lines = order.OrderLines; // do you want this null, or populated?

他们称之为“延迟加载”是有原因的,因为你懒得因为你不想明确要求这种关系。

如果延迟加载 (默认值),则第二行将默默执行额外往返数据库以获取订单行。

如果您延迟加载关闭,则上述行将为空。

获得它的方法是:

Order order = ctx.Orders.Include("OrderLines").SingleOrDefault();

简称为“急切加载”。

您不应该明确地为关系执行连接。如果您在EDMX中正确设置了关系(例如,您的“订单”实体上有一个名为“OrderLines”的导航属性),包含将为您执行左外连接。

如果未在模型上明确公开关系,则只需要进行显式连接。