分享:“延迟加载与预加载”使用体会

来源:互联网 发布:阿里云邮企业版下载 编辑:程序博客网 时间:2024/04/30 02:20
注:文章以Linq to Entities 讲解


接触mvc+ef开发一年时间左右了,之前一直处于使用状态,对ef里面的一些概念并没有太多的研究,在解决问题的过程中有些疑问一直逗留在脑海中,现在稍微可以空下来查查资料并整理下了。


什么是“延迟加载”和“预加载”?听上去好像很拽的样子。


延迟加载:


老大最初给我的解释——“当使用到的时候才去加载,比如:ToList()、ToDictionary()的时候”,自己也简单的百度过一下,做过一些简单的测试,当用frofile监视如下代码:


[url=http://note.youdao.com/yws/public/resource/802e32135fe250bf0309b0b115486081/6165897760E64AF08101AFD50A9F6DE2][/url]


断点到第一行时,profile是不会有任何动静的,但是当你往下执行 “ToList()”句时,profile会监视到你发送过去的sql语句,那么这就可以解释了“当你使用时才去加载”就是延迟加载的意思。想想好像是这么回事,但总感觉有些牵强或者说缺乏说服力,因为IQueryable毕竟不是实实在在如List、Dictionary、Array这种集合,所以我需要得到列表而使用ToList()也很正常。


其实这并不能非常直观的体现“延迟加载”的牛逼或者说特别之处(当前理解和感受到的)。


延迟加载真真体现个性的地方其实是相对于导航属性来说的,或者说“关联表”,比如我有客户表T_CUSTOMER和客户联系人表T_CUSTOMER_CONTACTS,他们之间是一对多关系,业务场景可能会让你有如下代码——业务比较扯淡,假设为之。


[url=http://note.youdao.com/yws/public/resource/802e32135fe250bf0309b0b115486081/735228756FC74EED903AFCFA093B4170][/url]


图片有可能显示不了,这个是有道分享地址:


http://note.youdao.com/share/?id=802e32135fe250bf0309b0b115486081&type=note


希望大家指点指点,给一些宝贵意见,谢谢!
1 1
原创粉丝点击