实体框架 - 何时自动加载引用的关系?

Bra*_*don 1 .net entity-framework

在什么实例中,Entity Framework会在您使用它们时自动加载子行和其他相关行?有时这似乎是在属性访问器上自动完成的,有时你必须明确地这样做.

例如,如果我有一个名为Car的表和一个名为Wheel的表,并且每个车行有4个轮子行,当我访问myCar.Wheel时,EF会自动加载Wheel行,或者是调用myCar的一般做法.Wheel.Load()第一个?

Cra*_*ntz 6

在EF 4中,如果您使用代码生成或代理,则默认情况下会进行延迟加载."纯粹的"POCO(不要与所谓的POCO代理混淆)不能进行延迟加载,除非你编写代码.更多细节在这篇文章中.

在EF 1中,没有延迟加载,因此您必须使用显式加载,预先加载或投影.

显式加载意味着调用Load().你通常IsLoaded在打电话前测试Load().

预先加载会导致属性与实体本身一起加载.这避免了第二次数据库查询.

投影使EF以优化的方式仅为您需要的属性生成SQL.

虽然在EF 4中默认启用延迟加载,但在任何ORM中它都是相对低效的(导致许多数据库查询).您可能仍希望使用投影或预先加载.