当前位置:  开发笔记 > 数据库 > 正文

Linq2SQl急切加载多个DataLoadOptions

如何解决《Linq2SQl急切加载多个DataLoadOptions》经验,为你挑选了1个好方法。

我喜欢使用Linq2SQL通过eager-loading来获取数据.代码类似于:

       DataLoadOptions options = new DataLoadOptions();

       options.LoadWith(c => c.ProductCompanies);

       options.LoadWith(c => c.OrderDetails);

       db.LoadOptions = options;

       IEnumerable products = db.Products.ToList();

我检查它生成了超过1个SQL查询,如我所料.实际上它只对Product和OrderDetails进行急切加载,并且逐个查询ProductCompany.我这里做错了吗?或者它是Linq2SQL问题?我们有任何解决方法吗?

非常感谢!

更新: 我从SQL事件探查器检查sql.我发现Leppie和Ian都是正确的.它们在一次交易中受限制.但是当我将其设置为延迟加载时,它会打开多个连接.



1> 小智..:

我在一些代码中也遇到了这个问题,经过大量的实验和谷歌搜索后,看起来LINQ只能从每个表中加入一对一的关系:如果你试图指定多个来预加载它(随机?)选择哪一个预加载和哪些其他离开延迟(简单地忽略那些LoadWith提示)

例如,其他人也发布了这个

http://codebetter.com/blogs/david.hayden/archive/2007/08/06/linq-to-sql-query-tuning-appears-to-break-down-in-more-advanced-scenarios.aspx


不错的链接.更好的是,这个答案实际上回答了问题 - *"为什么文件不正确和/或误导"*?`LoadWith `可以很容易地*静默地失败*或*做自己的事情*并在访问DataContext生命周期之外的项时导致问题.我甚至不关心效率 - 我只想要工作语义.我发现有效处理此问题的唯一可靠方法是在DataContext范围内手动*强制*访问.
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有