EF Lazy Load和Eager Load
1、Lazy Load方式(EF默认延迟加载)
通过vitual属性,或者context.Entry(cat).Collection(c => c.Products).Load();/context.Entry(product).Reference(p => p.Category).Load();方法。
其中context.Configuration.LazyLoadingEnabled = false;相当于把vitual注释掉。
2、Eager Load
var cs = from c in context.Categories.Include("Products") select c;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using (var context = new KTStoreModel()) { context.Database.Log = Console.Write; var customer = context.Customers. Include("Orders.OrderDetails"). Include("Orders.OrderDetails.Product"). Where(c => c.Id < 5); foreach (var c in customer) { Console.WriteLine(c.ContactName); foreach (var o in c.Orders) { Console.WriteLine("\tOrder_Id:{0}", o.Id); foreach (var od in o.OrderDetails) { Console.WriteLine("\t\tProduct_Id:{0}\t{1}\tPrice:{2}", od.ProductId, od.Product.Name, od.Price); } } } Console.WriteLine("done"); }
3、left join
using (KTStoreModel context = new KTStoreModel()) { context.Database.Log = Console.Write; var orderList = from orderDetail in context.OrderDetails join order in context.Orders on orderDetail.OrderId equals order.Id join product in context.Products on orderDetail.ProductId equals product.Id select new { orderDetail, order, product }; foreach (var odetail in orderList) { string id = odetail.order.Id.ToString(); string product = odetail.product.Name; Console.WriteLine($"订单编号:{id},商品:{product}"); } }