隐式延迟加载与显式延迟加载

时间:2010-04-04 08:14:30

标签: c# .net entity-framework lazy-loading

我一直在阅读实体框架,人们在为什么没有隐式延迟加载或其他东西而哭泣。基本上我一直在搜索有关Lazy Loading的事情,现在我知道它是什么:它是一种设计模式,它允许我们在真正需要时加载对象。

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

提前致谢...

2 个答案:

答案 0 :(得分:5)

如果你是拥有一个实体“OrderRow”和另一个实体“Order”,OrderRow上会有一个导航属性,指向它所属的订单。

目前,实体框架仅支持显式延迟加载,这意味着如果您已经检索了许多OrderRows并想要检查订单上的某些内容,则需要:

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

or.Order.Cancel();

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

答案 1 :(得分:4)

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

隐式意味着框架(在本例中为EF)会自行进行延迟加载,无论您是否打算这样做。