繁体   English   中英

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

[英]Implicit Lazy Loading vs Explicit Lazy Loading

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

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

提前致谢...

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

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

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

or.Order.Cancel();

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM