linq2sql中简单的Eager / Lazy加载示例
本文关键字:Lazy 加载 Eager 简单 linq2sql | 更新日期: 2023-09-27 18:12:00
是否有人在linq2sql中有一个简单的代码示例来演示急切加载和延迟加载之间的区别?
-
延迟加载:对于给定的实体,它的关联集合在第一次加载时可能是空的,但是当这些集合第一次迭代时,LINQ to SQL在加载后触发一个查询来加载这些集合,然后这些集合可以供将来使用,而不需要另一个查询:
var query = from o in db.GetTable<Order>() //db is the datacontext select o; foreach(Order o in query) { foreach(OrderDetail d in o.OrderDetails)//Deferred loading { //Do something on these collections } }
OrderDetails
只有在被迭代时才会被加载,所以如果OrderDetatils
没有被迭代,相应的查询就不会被执行。
-
急切加载:立即加载所有引用实体的相关集合,例如LINQ to SQL将自动为所有检索到的订单带来所有
OrderDetails
DataLoadOptions op = new DataLoadOptions(); op.LoadWith<Order>(o => o.OrderDetails); db.LoadOptions = op; var query = from o in db.GetTable<Order>() select o; foreach(Order o in query) { //Order details are eager loaded; additional queries are not needed foreach(OrderDetail d in o.OrderDetails) { //do something } }
注意:延迟执行是LINQ特性但是延迟加载是LINQ to SQL特性