使用实体框架4 load
方法与通过外键加入相比,是否存在差异/最佳做法,以便检索儿童数据?
例如,如果我有订单和订单线,我应该编写一个使用inner join
说 orderId 检索集合,还是应该像 Orders.OrderLines.Load 那样填充实体集合?
由于
答案 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”的导航属性),包含将为您执行左外连接。
如果未在模型上明确公开关系,则只需要进行显式连接。