有人有一个简单的Linq2Sql代码示例,演示急加载和惰性加载之间的区别吗?
有人有一个简单的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
,因此如果从未迭代OrderDetails
,则不会执行相应的查询。
急切加载:立即加载所有引用实体的关联集合,例如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到SQL的特性