隐式延迟加载vs显式延迟加载

问题描述:

我一直在阅读实体框架和人们都在哭,为什么没有隐式延迟加载或什么的。基本上我一直在寻找关于Lazy Loading的东西,现在我知道它是什么:它是一种设计模式,它允许我们在真正需要的时候加载对象。隐式延迟加载vs显式延迟加载

显式延迟加载和隐含延迟加载之间的区别是什么。

在此先感谢...

如果您有一个实体“OrderRow”和另一个实体“Order”,OrderRow上将有一个导航属性指向它所属的Order。

目前实体框架只支持明确延迟加载,这意味着如果你已经retreived一些OrderRows,并希望检查订单的东西,你需要:

// or is an OrderRow 
if(!or.Order.IsLoaded) 
    or.Order.Load() 

or.Order.Cancel(); 

但是,如果你有延迟加载你不需要IsLoaded检查,它会自动完成,你可以直接做or.Order.Cancel(),如果需要,订单将自动加载。这就是linq-to-sql的工作方式,它可以节省一些打字的时间和一些错误风险。另一方面,它不太清楚何时以及如何执行数据库访问。对于隐式加载,很容易编写低效的代码,使得从表中获取每行的一个DB往返。

+0

所以你的意思是显式延迟加载是相关表所需的? – Tarik 2010-04-04 08:33:48

+0

不,隐式加载意味着相关表将自动加载到后台。 – 2010-04-04 08:50:24

+0

..更像在前台。执行会阻塞,直到它被提取。 – 2015-04-20 20:52:47

显式表示您明确地将代码写入延迟加载。

隐式意味着框架(在这种情况下是EF)会自动进行延迟加载,无论您是否打算加载。