Lia*_* Wu 12 .net linq linq-to-sql
我喜欢使用Linq2SQL通过eager-loading来获取数据.代码类似于:
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Product>(c => c.ProductCompanies);
options.LoadWith<Product>(c => c.OrderDetails);
db.LoadOptions = options;
IEnumerable<Product> products = db.Products.ToList<Product>();
Run Code Online (Sandbox Code Playgroud)
我检查它生成了超过1个SQL查询,如我所料.实际上它只对Product和OrderDetails进行急切加载,并且逐个查询ProductCompany.我这里做错了吗?或者它是Linq2SQL问题?我们有任何解决方法吗?
非常感谢!
更新: 我从SQL事件探查器检查sql.我发现Leppie和Ian都是正确的.它们在一次交易中受限制.但是当我将其设置为延迟加载时,它会打开多个连接.
小智 17
我在一些代码中也遇到了这个问题,经过大量的实验和谷歌搜索后,看起来LINQ只能从每个表中加入一对一的关系:如果你试图指定多个来预加载它(随机?)选择哪一个预加载和哪些其他离开延迟(简单地忽略那些LoadWith提示)
例如,其他人也发布了这个
不,您没有做错任何事,Linq2SQL 在单个事务中批处理所有内容,但可能会执行无限数量的查询以获得所需的结果。DataLoadOptions通常仅在DataContext结果用法的整个上下文不可用时才使用。如果您可以DataContext在执行期间保持活动状态,那么最好依赖延迟执行(这是默认的)。